有一个多生产者消费者模式生产者1->消费者1/生产者2->消费者2/生产者3,每个生产者都使用一个完成服务,但是我在编写完成后的逻辑编码时遇到了问题。
问题是 main 将一些 (x) 任务放在生产者 1 队列中,这反过来会导致生产者 1 将 (y) 任务放在生产者 2 上,并且生产者 2 会将 z 任务放在生产者 3 上。x、y 和 z 是不同,因此 main 不能只查看生产者 3 完成队列并获取 z 期货,因为 main 不知道 z。
所以我尝试了毒丸的想法和一个初始化为3的CountDownLatch,主要知道生产者1只有x个任务,所以我可以在最后提交毒丸,然后当生产者1收到这个它可以减少锁存器并发送毒药药丸发送给生产者 2,生产者 2 接收到一个它会减少锁存器,然后将其发送给生产者 3。当生产者 3 收到它时,它会减少锁存器。main 只是做 countdownlatch.await() 并且在所有任务完成之前无法继续。但这只有在每个 executor 服务仅限于一个线程时才有效,因为当生产者收到毒丸时,它仅意味着所有前面的任务都已启动尚未完成。
那么我该如何解决这个问题,我想我一定是在某个地方错过了一个更简单的解决方案。