我有一个任务,我计划通过ScheduledThreadPoolExecutor.scheduleAtFixedRate(task, rate, ...)定期运行。用户可以手动取消此任务,这会调用ScheduledFuture.cancel(true)。出于某种原因,可能取决于他们何时取消此任务,工作线程(执行程序用于运行我的任务)在我的任务的 run() 方法退出后似乎保持中断状态。
尽管工作线程(从池中获取并重用)会在使用现有钩子(通过ThreadPoolExecutor.beforeExecute()或ThreadPoolExecutor.afterExecute())开始新任务之前清除其中断状态。但它在默认实现中不这样做。
我有两个问题:
- 工作线程怎么会处于设置了中断状态的状态?
- 为什么默认实现在开始新任务之前不清除中断状态?