有没有办法不断更新线程池并检查是否有任何提交的callables已经完成并获得该值? ExcutorService允许您提交一堆线程,然后在以后获取可调用的结果,但如果您不知道将提交多少可调用内容或者您想要连续提交可调用内容,该怎么办?
ThreadPoolExecutor听起来像我想要的,但这只能在runnables列表上运行,我需要能够从线程中获得结果。
在我的情况下,订单无关紧要。我希望不断地将callables添加到某种队列中,然后在它们进入时对这些结果做一些事情。这可以实现吗?
答案 0 :(得分:2)
我不是100%确定我理解您的要求,但我认为您可以使用ExecutorCompletionService
。
此类包装Executor,您可以使用submit
添加任务,使用take
或poll
来检索下一个已完成任务。如果还没有完成的任务,take
将阻止,直到一个任务完成。