如果我经常安排要运行的任务,而这些任务被 future.cancel(true);
取消,那么 Executor.newSingleThreadExecutor()
会如何表现?
执行器生成的单线程是否会被中断(因此 future 代码需要清除中断),或者中断标志是否会在下次 future 启动时自动清除。
执行器是否需要在每个中断上生成一个额外的线程以供剩余的任务队列使用?
有更好的方法吗?
最佳答案
好问题,我没有在任何地方找到这个记录,所以我想说它依赖于实现。
例如,OpenJDK 在每个执行任务之前都会重置中断标志:
// If pool is stopping, ensure thread is interrupted;
// if not, ensure thread is not interrupted. This
// requires a recheck in second case to deal with
// shutdownNow race while clearing interrupt
if ((runStateAtLeast(ctl.get(), STOP) ||
(Thread.interrupted() &&
runStateAtLeast(ctl.get(), STOP))) &&
!wt.isInterrupted())
wt.interrupt();
关于java - 中断 future 如何与单线程执行器一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46243286/