Java多线程-监视多个线程的活动的最佳方法是什么?

Mal*_*ker 2 java multithreading

我有许多正在执行长期任务的线程。这些线程本身具有子线程,这些子线程会进一步细分工作。我跟踪以下内容的最佳方法是什么:

  • 我的流程创建了多少线程
  • 当前每个线程的状态是什么
  • 每个线程当前已进入进程的哪个部分

我想以一种尽可能高效的方式做到这一点,并且一旦线程完成,由于我需要尽早释放内存,我不希望对它们有任何引用。

有什么建议吗?

Pet*_*ham 5

不要以线程(它们是OS对象并且不包含任何应用程序语义)的角度来考虑,而要以任务的角度来考虑。线程不能知道任务完成了50%。查看java.util.concurrent中用于根据执行程序和可调用对象管理任务的工具。

在大多数情况下,如果您使用Java(即非嵌入式系统),则不必关心进程创建的线程数(或创建的线程数少于创建的对象数)-您不想用完,但是如果您以高级语言显式管理OS资源,则可能是错误的抽象级别。

对于中间反馈,请创建一个进度侦听器接口,该接口包含一个用于通知侦听器的方法,该方法通知任务必须到达的位置,将其传递给创建时的任务,并在进度变化时在您的任务期间调用它。确保该接口的任何实现都是线程安全的。