灵活的倒计时程序?
2022-09-01 14:32:27
我现在遇到过两次问题,即生产者线程生成N个工作项,将它们提交给一个,然后需要等到所有N个项都得到处理。ExecutorService
警告
-
N事先不知道。如果是这样,我会简单地创建一个,然后有生产者线程,直到所有工作完成。
CountDownLatch
await()
- 使用 a 是不合适的,因为尽管我的生产者线程需要阻塞(即通过调用),但无法发出所有工作的信号,从而导致生产者线程停止等待。
CompletionService
take()
我目前最喜欢的解决方案是使用整数计数器,并在提交工作项时递增该计数器,并在处理工作项时递减该计数器。在完成所有 N 个任务之后,我的生产者线程将需要等待锁定,检查是否在通知时。如果使用者线程已递减计数器并且新值为 0,则使用者线程需要通知生产者。counter == 0
有没有更好的方法来解决这个问题,或者我应该使用一个合适的结构,而不是“滚动我自己的”?java.util.concurrent
提前致谢。