【发布时间】:2016-04-22 09:44:31
【问题描述】:
我有一个 ProcessesManager 类 extends Thread。在run() 方法中,我正在这样做:
public void run() {
while(true)
synchronized (GlobalVariables.queue) {
while (GlobalVariables.queue.isEmpty())
// Threads are waiting here...
GlobalVariables.queue.wait();
// Get the next work item off of the queue
work = GlobalVariables.queue.remove();
}
}
在 main 方法中,我创建了 ProcessesManager 类的四个实例(线程)。
for (int i = 0; i < 4; i++) {
ProcessesManager processesManager = new ProcessesManager();
processesManager.start();
}
他们正在等待queue。队列一开始是空的,然后我开始填满队列,线程开始处理队列项。现在线程同时从队列中删除/添加项目。程序本身没有“结束”。但要明确一点,程序的结束是在 1. Queue 为空的时候。 2. 所有线程都在等待,不再工作。
现在我想实现一个检查三个条件的方法:
检查队列是否为空。
检查是否所有线程都在等待并且没有线程在做任何工作。
检查它是否不是应用程序的开始(因为在开始时,上述两个条件会暂时成立)。
如果满足以上所有条件,我想退出/关闭应用程序。
我可以通过简单地检查GlobalVariables.queue.isEmpty() 方法来检查条件1。但我不知道如何检查所有线程是否都处于等待状态。我也可以找到第三种情况的解决方案。
如何检查是否所有线程都在等待而不工作?
编辑
我正在使用本教程:http://www.drdobbs.com/parallel/java-concurrency-queue-processing-part-1/232700457。有没有办法知道程序的结束?
【问题讨论】:
标签: java multithreading queue