我在数组中有几个线程。 所有线程都在LinkedBlockingQueue上运行。 每个线程从队列中获取一个元素(它是一个文件名),读取它的依赖项(简单I / O)并将这些依赖项添加到队列中,这样我们也可以获得它们的依赖项。在某些时候,队列将为空(当我们发现所有依赖项时)。问题是,如何检查所有线程是否在等待队列中的元素,如果是,我该如何终止它们? 我"黑客攻击"它通过使用方法poll(long timeout,TimeUnit单元)来工作,但我想从main方法终止它们。
编辑: 我不能在队列为空的情况下终止,因为一开始我们队列中只有一个文件,而一个线程正在处理它,队列一会儿就会空了,直到发现新的依赖关系。 / p>
提前谢谢。
答案 0 :(得分:1)
这是一个想法:让一个原子整数计算出#34;失业的线程数"。一旦主要注意到这个计数器达到数组N的长度,就让它将N个特殊元素放入队列中,当由一个线程获得时,它会使它结束。