2015-11-24 147 views
-2

我在数组中有几个线程。 所有线程都在LinkedBlockingQueue上运行。 每个线程从队列中获取一个元素(这是一个文件名),读取它的依赖关系(简单I/O)并将这些依赖关系添加到队列中,以便我们也可以获得它们的依赖关系。在某个时候,队列将是空的(当我们发现所有的依赖关系时)。问题是,如何检查所有线程是否正在等待队列中的元素,如果是,我如何终止它们? 我通过使用方法poll(long timeout,TimeUnit unit)“破解”它的工作,但我想从主方法终止它们。Java线程终止

编辑: 我不能在队列为空的情况下终止,因为一开始我们可能只有一个文件在队列中,而当一个线程正在处理它时,这个队列是空的一段时间,直到新依赖关系被发现。

预先感谢您。

+0

请给我们一些代码。不明白为什么线程无法检测到队列是空的,然后终止? –

回答

1

这是一个想法:有一个原子整数计算“失去工作”的线程数。一旦主计算机通知该计数器达到数组N的长度,就让它将N个特殊元素放入队列中,当线程获得该元素时,会使其结束。

+0

不错的想法,但不是只等待抓取结束而绑定一个线程,为什么不让最后一个工人进入失去工作状态发送关闭信号? –

+0

@jameslarge绝对。有很多可能性...... –