如何终止异步执行的任务

场景如下:
前端调用一个接口(开始),后台收到请求后,异步执行一个任务,返回给前端任务正在处理中。
在任务执行过程中,用户可以选择终止任务,调用另外一个接口(终止),后台需要停止正在执行的任务。

我觉得你是错误的理解了什么叫异步执行。
异步执行就是非同步的,
1.当前线程将任务交给另一个线程去执行,不阻塞当前线程
2.当前线程不关心任务执行的过程,只有当任务执行完毕后执行一个回调函数
而你的需求恰恰是希望监控这个过程,那你开个线程呗,还随时能杀死线程,不要乱用异步。

1.建立一个存放线程的类ThreadMap,定义一个

public static final Map<String,Thread> map = new HashMap<>();

2.所有的异步任务执行的时候,都要先设置异步线程的名称,名称要有固定的头和差异化的参数,比如说uuid等等,uuid可以让外面调用的地方传进来,然后将当前线程设置到上面的map中,key为名称,value为当前线程对象。同时外面调用的地方要把这个线程的名称存到数据库里,前端查询任务状态的时候要返回给前端
3.当前端发起中止任务的请求时,传入线程名称,后端从map中根据线程名称获取当前线程,然后中断该线程thread.interrupt();
4.最后,非常不建议你这么做,因为异步线程里,如果涉及到事务,I/O,等需要释放资源,保持一致性的操作,突然中断线程,会导致未知的错误,而且最关键的是thread.interrupt();方法不是一定可以中断成功的,有时候正在做I/O操作的时候,会需要I/O执行完,才会中断线程。