这可能是一个简单的问题,但我尝试了很多不同的东西,无论我尝试什么,我都无法让它发挥作用。
基本上我有一个JProgressBar,我想在处理任务列表时更新。任务很短,但有很多这就是我使用ExecutorService的原因。
问题是我找不到一个好方法来听ExecutorService剩下要处理的任务数。 invokeAll()阻塞,直到所有任务都完成为止,如果我使用submit()执行每个任务,那么在命中JProgressBar的代码时,任务就完成了。我甚至试过交错这两个,但这只是讨厌。
是否有一种简单的方法可以提交一批任务(实现可调用),然后调用一个开始处理的execute()方法?
或者我在这里看错了方向?
谢谢!
答案 0 :(得分:1)
您可以使用ExecutorCompletionService
:http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ExecutorCompletionService.html
doc页面上的示例非常好;)
基本上,您只是将任务提交给服务,然后轮询或接受。任务恢复后,您可以更新JProgressbar
。