Java:带有Callables的ExecutorService:在循环中重用相同的Pool?关机是必要的吗?

时间:2012-03-05 12:39:59

标签: java multithreading loops executorservice callable

我有一个循环{Loop-1},我开始使用Threads。包含{Loop-1}的类实现了守护进程和Runnable。 在{Loop-1}启动的线程中,调用类coordinate()的方法Coordinate.java,我使用ExecutorService。

当创建Coordinate.java的对象时(这发生在{Loop-1}之前),我实例化一个ExecutorService pool = Executors.newFixedThreadPool(2);

coordinate()中,我创建了一个实现Callable的类的两个对象,然后我启动它们并将结果存储在Future of Future结果中。 callableResults = pool.invokeAll(threads);

之后,我尝试将结果放在result = future.get();

的循环中

然后,我返回{Loop-1},整个过程再次开始(致电coordinate()invokeAll()future.get()

现在我有以下问题: 1.在coordinate()中获得结果后,是否需要关闭ExecutorService池? 2.每次{Loop-1}来电coordinate()时,是否需要重新创建游泳池?

谢谢你的回答! : - )

2 个答案:

答案 0 :(得分:2)

不,不。可以使用固定线程池中的线程,直到您在其上调用shutdown。因此,您可以简单地重新提交要执行的新任务并获取结果,就像您在第一轮中所做的那样。

答案 1 :(得分:1)

完成处理所有任务后,您需要关闭executorService。 提交任务可以分多个周期。

调用executorService.shutDown()后,您可以等待所有任务完成后使用executorService.awaitTermination(10, TimeUnit.SECONDS)调用shutDown()。

或者,你可以这样做:while (!executorService.isTerminated()) { }