gpt4 book ai didi

java - 中断 future 如何与单线程执行器一起工作?

转载 作者:行者123 更新时间:2023-11-30 02:23:29 26 4
gpt4 key购买 nike

如果我经常安排要运行的任务,而这些任务被 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();

来自OpenJDK jdk8u ThreadPoolExecutor#runWorker source的片段.

关于java - 中断 future 如何与单线程执行器一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46243286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com