我现在遇到了两次问题,即生产者线程生成N个工作项,将它们提交给a ExecutorService,然后需要等到所有N个项都被处理完毕.
注意事项
CountDownLatch然后拥有生产者线程,await()直到所有工作完成.CompletionService是不合适的,因为虽然我的生产者线程需要阻塞(即通过调用take()),但是没有办法表明所有工作都已完成,导致生产者线程停止等待.我目前最喜欢的解决方案是使用整数计数器,并在提交工作项时递增它,并在处理工作项时递减它.在所有N个任务的提交之后,我的生产者线程将需要等待锁定,检查是否counter == 0通知它.如果消费者线程已经递减计数器并且新值为0,则消费者线程将需要通知生产者.
有没有更好的方法解决这个问题,或者java.util.concurrent我应该使用合适的构造而不是"滚动自己的"?
提前致谢.