我有一个包含5个线程的线程池,并将其未来句柄存储在ArrayList中。我想要做的是在所有线程退出后返回主线程。我的情况是创建一个无限运行的程序。我的概念很简单,但我不确定如何实现它。
main()
方法调用threadManager()
方法threadManager()
创建线程futureCancel()
方法,该方法为所有线程发出future.cancel
,然后关闭线程池threadManager()
并继续。答案 0 :(得分:0)
这是你想要做的吗?
// Always has 5 threads even if 1 throws an exception
ExecutorService exe = Executors.newFixedThreadPool(5);
List<T> results = new ArrayList<T>();
while(results.isEmpty()) {
List<Callable<T>> tasks = createTasks();
List<Future<T>> futures = exe.invokeAll(tasks);
for(Future<T> future : futures) {
try{
results.add(future.get()); // throws InterruptedException, ExecutionException
} catch(Exception e) {
results.clear();
break;
}
}
}