【发布时间】:2012-12-25 06:14:41
【问题描述】:
我正在使用Executors.newCachedThreadPool() 和invokeAll 和Callables 列表来执行长时间运行的多线程处理。
我的主线程被阻塞,直到所有线程都完成并且我可以处理invokeAll 返回的期货。但是,如果Callables 之一抛出异常并终止其他线程,我希望invokeAll 立即返回。
使用execute 而不是invokeAll 会阻塞第一个future.get(),它不需要是引发执行的那个。
使用忙等待循环遍历所有期货并检查isDone()似乎也不是最好的方法。
【问题讨论】:
-
您是否尝试过关闭 executos 服务并让它中断其他任务?如果那些其他任务不等待/读取,他们仍然可以不时检查线程中断标志
标签: java multithreading exception executorservice