我有一个正在运行的任务他们做了一些步骤,我可以启动future = executor.submit(callable)
并使用开始和停止按钮停止future.cancel()
它。在每一步之间,任务看起来是否取消然后返回,否则进一步运行。
在一个步骤中他睡觉例如2秒。在这两秒内取消任务时,睡眠将中断,任务将进一步运行到步骤结束。但是,如果我在中断和步骤结束之间启动任务,则应该在下一步中进一步运行(不要创建新的Callable运行进一步运行哪一个)。一切正常。
但是当我第二次用future.cancel()
取消任务时,它就没有反应
如何取消可调用两次或“取消”它再次取消。
cancel()
的调用不是取消任务,只是为了中断睡眠。
这是一个有助于您了解我的问题的小代码示例:
public void start() {
if(currentAlarm != null){ //already running
changeTransmitterStatus(AlarmTransmitterStatus.TRANSMIT_ALARM);
return;
}
changeTransmitterStatus(AlarmTransmitterStatus.RUNNING);
//transmitter is the callable and result the future
result = executorPool.submit(transmitter);
}
public void stop() {
changeTransmitterStatus(AlarmTransmitterStatus.STOP);
result.cancel(true); //call this twice it doesn't react
}
感谢您的帮助!