这可能很简单,但我已经尝试了很多不同的方法,无论我尝试什么,我都不能让它工作。
基本上,我有一个在处理任务列表时想要更新的JProgressBar。任务很短,但是有很多任务,这就是我使用ExecutorService的原因。
问题是,我找不到一种好的方法来监听ExecutorService,了解还有多少任务需要处理。invokeAll()会一直阻塞到所有任务都完成,如果我使用submit()来执行每个任务,那么当它命中JProgressBar的代码时,这些任务基本上已经完成了。我甚至试着把这两个交错,但那太糟糕了。
有没有一种简单的方法可以提交一批任务(实现callable),然后调用execute()方法开始处理?
或者我在这里完全看错了方向?
谢谢!
发布于 2011-10-23 00:55:21
您可以使用ExecutorCompletionService:http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ExecutorCompletionService.html
文档页面上的示例相当不错;)
基本上,您只需将任务提交给服务,然后轮询或获取。任务返回后,您可以更新您的JProgressbar。
https://stackoverflow.com/questions/7861049
复制相似问题