我有一个循环{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()
时,是否需要重新创建游泳池?
谢谢你的回答! : - )
答案 0 :(得分:2)
不,不。可以使用固定线程池中的线程,直到您在其上调用shutdown
。因此,您可以简单地重新提交要执行的新任务并获取结果,就像您在第一轮中所做的那样。
答案 1 :(得分:1)
完成处理所有任务后,您需要关闭executorService。 提交任务可以分多个周期。
调用executorService.shutDown()
后,您可以等待所有任务完成后使用executorService.awaitTermination(10, TimeUnit.SECONDS)
调用shutDown()。
或者,你可以这样做:while (!executorService.isTerminated()) { }