我正在从事一个需要处理大量数据元素输入的项目。每个的处理都独立于其他的,我需要从每个返回一个结果。我现在正在做的是Callable
为每个元素创建一个任务来进行处理,并在线程完成时使用ExecutorCompletionService
它来收集Future
结果。
然后我有另一个线程从队列中拉出Future
对象。ExecutorCompletionService
这个线程只是在一个无限的while循环中旋转并调用take()
哪个阻塞,直到aFuture
出现在队列中。
我正在尝试做的是避免对象队列增长速度快于我将它们从队列中拉出的情况,所以如果我在处理结果 Future
时落后,我想休眠创建任务的进程。Future
我遇到的问题是我无法找到查看队列中有多少Future
对象的方法。ExecutorCompletionService
有没有办法做到这一点?
我可能会保留一个外部计数器,在创建新任务时递增,在Future
处理 a 时递减,但这只会让我知道未完成任务的数量,而不是实际完成的数量。关于解决这个问题的最佳方法有什么想法吗?