future cancel失败一例

future cancel失败一例由于future线程中任务执行时间比较长,有时候想停都停不下来。所以搞了个static的map:futureMap存放future对象,创建的时候put进去,然后前台通过调用取消接口,调用下面方法对线程进行中断。publicStringcancelFuture(inttaskId){try{booleancancelFlag=futureMap.get(taskId).cancel(true);logger.info(…

由于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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注