[英]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
的每个线程的进度指示器-那么另一个选择可能是创建一个从Thread
到AtomicInteger
的Map
,将每个线程关联使用一个计数器,然后将AtomicInteger
传递到每个线程的构造函数中。 这样,每个线程可以连续增加计数器,并且您可以拥有另一个线程来连续轮询进度。
简而言之,根据要实现的目标,您有很多选择。 希望这里有所帮助!
尝试使用任何类型的同步。 例如,等待某种监视器/信号灯,直到作业完成/您需要什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.