0

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

Coordinate.java创建对象时(这种情况发生一次 BEFORE {Loop-1}),我实例化一个 ExecutorService pool = Executors.newFixedThreadPool(2);

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

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

然后,我返回{Loop-1}并重新开始整个过程​​(调用coordinate(),,,invokeAll()future.get()

现在我有以下问题: 1.我得到结果后是否需要关闭 ExecutorService 池coordinate(){Loop-1}2. 每次通话时我都需要重新创建池coordinate()吗?

感谢您的回答!:-)

4

2 回答 2

2

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

于 2012-03-05T12:58:50.937 回答
1

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

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

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

于 2012-03-05T12:59:20.453 回答