Java Future,两次调用cancel方法

时间:2018-03-02 10:48:48

标签: java sleep interrupt

我有一个正在运行的任务他们做了一些步骤,我可以启动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
  }

感谢您的帮助!

0 个答案:

没有答案