java确保任务是可中断的
当我调用Future.cancel()
时,如何确保我的任务对中断做出响应
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Boolean> future = executor.submit(task);
try {
future.get(timeout, timeoutUnit);
} catch (TimeoutException e) {
future.cancel(true);
}
# 1 楼答案
在
task
运行中,确保在不同级别执行interrupt
检查。比如:如果您的逻辑不是循环,那么在数据库或web服务调用等主要计算之前检查中断状态
这里的想法是不断检查中断状态,因为当调用
future.cancel(true)
时,它最终会中断运行task
的线程。这是一种知道何时终止的方法# 2 楼答案
调用
future.cancel(...)
将停止尚未运行的任务。如果正在运行,那么如果使用future.cancel(true)
,它将中断正在运行的线程要停止线程,需要测试线程中断标志:
你需要适当地处理
InterruptedException
。例如:看看我关于threads not interrupting的回答