我有一些发展要做,我试着看看是否有一个设计模式可供使用。 问题很简单:
我有一个发布许多踏板的主线程。主线程必须等待每个线程完成然后再执行其他操作。 现有的代码有点难看。我有一个while循环来检查一个线程组,看看是否正在运行:
//launch threads
.....
//wait for threads to finish
while (ThreadRepository.getInstance().isActiveThreadGroup(myGroupId)) {
Thread.sleep(5000);
}
//doing something else
因此,如您所见,while循环一直运行,直到没有线程运行。
我正在思考模式生产者 - 消费者,我想做类似的事情:
例如,使用一些BlockingQueue,每个线程放入(或接受)一些东西。
而不是有时间和睡眠,我希望有类似的东西
myQueue.take()
但要等待队列为空。
当为空时,表示没有线程在运行。
我尝试在互联网上搜索,但我找不到与我的问题相符的东西。
有谁知道解决问题的效率最高?
答案 0 :(得分:2)
有两种简单的方法让一个线程等待N个线程完成:
countDown()
,并使锁存器上的主线程调用await()
。第二种技术比第一种技术稍微硬一点,但也更灵活,可重复使用,并允许在延迟后唤醒,即使N个线程还没有完成。答案 1 :(得分:0)
您可以按如下方式使用BlockingQueue:
每个子线程在完成后将消息放入队列
主线程从队列中获取消息并对其进行计数。当消息数等于线程数时,所有线程都已完成。