gpt4 book ai didi

java - 在Java中无法识别多个生产者/消费者何时完成

转载 作者:行者123 更新时间:2023-12-01 05:36:26 26 4
gpt4 key购买 nike

有一个多生产者消费者模式 Producer1 -> Consumer1/Producer2 -> Consumer2/Producer 3,每个生产者都使用一个完成服务,但我在编写完成时的计算逻辑时遇到问题。

问题在于,main 将一些 (x) 任务放入生产者 1 队列中,这反过来将导致生产者 1 将 (y) 任务放入生产者 2 上,并且生产者 2 会将 z 个任务放入生产者 3 上。 x, y和 z 不同,因此 main 不能只查看生产者 3 完成队列并获取 z future,因为 main 不知道 z。

所以我尝试了毒丸想法,并将 CountDownLatch 初始化为 3,main 知道生产者 1 只有 x 个任务,所以我可以在最后提交毒丸,然后当生产者 1 收到这个时,它可以递减闩锁并向生产者 2 发送一颗毒丸,生产者 2 收到毒丸后,它会递减锁存器,将发送给生产者 3 的毒丸丸减少。当生产者 3 收到它时,它会递减锁存器。 main 只执行 countdownlatch.await() 并且在所有任务完成之前无法继续。但这仅在每个执行器服务仅限于一个线程的情况下才有效,因为当生产者收到毒丸时,仅意味着所有前面的任务已启动但尚未完成。

那么我该如何解决这个问题,我想我一定在某个地方错过了一个更简单的解决方案。

最佳答案

可以依次关闭和等待每个 executorService 的终止。

ExecutorService[] services = { executor1, executor2, executor3 };
for(ExecutorService service: services) {
service.shutdown();
service.awaitTermination(1, TimeUnit.MINUTES);
}

关于java - 在Java中无法识别多个生产者/消费者何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125451/

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