线程池关闭后返回主线程?

时间:2014-02-12 00:32:15

标签: java multithreading threadpool main

我有一个包含5个线程的线程池,并将其未来句柄存储在ArrayList中。我想要做的是在所有线程退出后返回主线程。我的情况是创建一个无限运行的程序。我的概念很简单,但我不确定如何实现它。

  1. main()方法调用threadManager()方法
  2. threadManager()创建线程
  3. 某个线程抛出异常并发出futureCancel()方法,该方法为所有线程发出future.cancel,然后关闭线程池
  4. 程序返回主方法,再次调用threadManager()并继续。

1 个答案:

答案 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;
        }
    }
}