繁体   English   中英

java:监视工作线程的模式?

[英]java: Patterns for Monitoring worker threads?

并为缺乏多线程应用程序的知识辩解,但是我是该领域的新手。

是否存在一种模式或常用方法来从监视器(充当监视器的类)监视工作线程的“作业完成”或“作业状态”?

我目前所做的是创建一个工作列表,并为每个工作创建一个线程。 在所有线程启动之后,我遍历了工作列表并通过调用方法来“检查其状态”。

当时我无法提出不同的解决方案,但是刚进入该领域时,我不知道这是一条路要走,还是不知道我应该研究其他解决方案或模式。

使用ThreadPool和Executor,然后会得到Future <>,并且可以轮询它们的完成情况以及一些更好的东西。 我为您感激这本书: Java并发实践

根据您的需求,可以采用多种方法。

如果您只想等待所有线程完成(即,您关心的是一切都已完成,然后继续),则可以使用Thread.join()

try {
    for (Thread t: threadsIWaitOn)
        t.join();
} catch (InterruptedException iex) {
     /* ... handle error ... 
}

如果希望对线程状态进行更细粒度的控制,并且希望能够随时知道线程在做什么,则可以使用Thread.getState()函数。 这将返回一个Thread.State对象,该对象描述线程是否正在运行,阻塞,新建等。Javadoc特别指出,该对象旨在监视线程的状态,而不是尝试对其进行同步。 这可能是您想要做的。

如果您想获得更多的信息-例如,如何获取随着线程的进展从0到100 AtomicInteger的每个线程的进度指示器-那么另一个选择可能是创建一个从ThreadAtomicIntegerMap ,将每个线程关联使用一个计数器,然后将AtomicInteger传递到每个线程的构造函数中。 这样,每个线程可以连续增加计数器,并且您可以拥有另一个线程来连续轮询进度。

简而言之,根据要实现的目标,您有很多选择。 希望这里有所帮助!

尝试使用任何类型的同步。 例如,等待某种监视器/信号灯,直到作业完成/您需要什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM