由于future线程中任务执行时间比较长,有时候想停都停不下来。所以搞了个static的map:futureMap存放future对象,创建的时候put进去,然后前台通过调用取消接口,调用下面方法对线程进行中断。
public String cancelFuture(int taskId) {
try {
boolean cancelFlag = futureMap.get(taskId).cancel(true);
logger.info(“线程中断状态:” + String.valueOf(cancelFlag));
return “SUCCESS”;
}catch (Exception e){
logger.error(“取消任务失败”, e);
return “FAILED”;
}finally {
futureMap.remove(batchHisId);
}
}
调试的过程中,发现日志可以打出
线程中断状态:ture
证明是执行了cancel的。但观察任务的情况,实际上线程并没有停下来,线程中的任务会一直执行到完成。
从另外一篇文章(我找不到了)中得到信息,在future的call方法中不能捕获异常,否则中断异常也会被捕获,导致中断失败。
查看日志,是有抛出InterruptedException的。
最终,在call里面修改:
catch(Exception e) {
throw new InterruptedException();
}
中断任务正常,
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38599.html