gpt4 book ai didi

java线程: producer - consumer

转载 作者:行者123 更新时间:2023-11-30 04:49:16 24 4
gpt4 key购买 nike

我有一些开发要做,我尝试看看是否有可以使用的设计模式。问题很简单:

我有一个启动许多线程的主线程。主线程必须等待每个线程完成然后再做其他事情。现有的代码有点难看。我有一个 while 循环来检查线程组以查看是否正在运行:

//launch threads
.....
//wait for threads to finish
while (ThreadRepository.getInstance().isActiveThreadGroup(myGroupId)) {
Thread.sleep(5000);
}

//doing something else

因此,如您所见,while 循环一直运行,直到没有线程运行为止。

我正在考虑生产者-消费者模式,我想做这样的事情:

例如使用一些BlockingQueue,每个线程都会在其中放入(或取出)一些东西。我不想花时间 sleep ,而是想要一些类似的东西myQueue.take() 但要等待队列为空。当为空时,意味着没有线程在运行。

我尝试在互联网上搜索,但没有找到与我的问题相符的内容。

有人知道解决我的问题最有效的方法吗?

最佳答案

有两种简单的方法可以让一个线程等待 N 个线程完成:

  1. 让主线程在所有其他线程上调用 join()。 join() 在线程完成或已经完成时返回
  2. 创建一个初始化为 N 的 CountDownLatch,将此闩锁传递给所有线程,让每个线程在完成后对闩锁调用 countDown(),并让主线程调用 await () 位于闩锁上。第二种技术比第一种技术有点难,但也更灵活和可重用,并且允许在一定延迟后被唤醒,即使 N 个线程尚未完成。

关于java线程: producer - consumer ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com