Java:ExecutorService和Callables:在循环中重用同一个池?需要关机吗?

Java:ExecutorService和Callables:在循环中重用同一个池?需要关机吗?,java,multithreading,loops,executorservice,callable,Java,Multithreading,Loops,Executorservice,Callable,我得到了一个循环{loop-1},在这里我开始线程。包含{Loop-1}的类实现Daemon和Runnable。 在{Loop-1}中,启动的线程调用一个类coordinate.java的方法coordinate(),我在该类中使用ExecutorService 当创建Coordinate.java的对象时(这在{Loop-1}之前发生一次),我将实例化一个ExecutorService pool=Executors.newFixedThreadPool(2) 在coordinate()中,我创

我得到了一个循环
{loop-1}
,在这里我开始线程。包含
{Loop-1}
的类实现Daemon和Runnable。 在
{Loop-1}
中,启动的线程调用一个类
coordinate.java
的方法
coordinate()
,我在该类中使用ExecutorService

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

coordinate()
中,我创建了一个类的两个对象,该类实现了Callable,然后启动它们,并将结果存储在未来结果的列表中。
callableResults=pool.invokeAll(线程)

之后,我尝试使用
result=future.get()在循环中获取结果

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

现在我有一个问题: 1.在
坐标()
中获得结果后,是否需要关闭ExecutorService池? 2.每次调用
coordinate()
时,是否需要重新创建池


谢谢你的回答!:-)

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

不,您不需要。固定线程池中的线程可以一直使用,直到您对其调用
shutdown
。因此,您只需重新提交要执行的新任务并获取其结果,就像第一轮一样。

您需要在处理完所有任务后关闭executorService。 任务的提交可以是多个周期

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


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

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

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

或者,您可以执行:
while(!executorService.isTerminated()){}

这很难看:
while(!executorService.isTerminated()){}
。当有未完成的任务时,它将使核心100%疯狂<代码>等待终止
要好得多。这很难看:
而(!executorService.isTerminated()){}
。当有未完成的任务时,它将使核心100%疯狂<代码>等待终止
要好得多。