//安全的终止所有任务
@RequestMapping("/stop")
public void stop(HttpServletRequest request,HttpServletResponse response) throws InterruptedException {
System.out.println("更换产品操作开始");
try {
exec.shutdown();
Thread.sleep(20);//增加延迟
synchronized (waitLock){
if(i == 0){
//用轮询的方式判断线程池是不是被关闭
while (exec.isTerminated()){
System.out.println("开始处理IO等其他耗时工作");
//线程开启长耗时工作
caozuo(s);
i=1;
break;
}
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
//其他代码
}
}
我已经用上段代码安全(数据不丢失)的关闭了线程池了,表示我当前的任务结束了;但是我后续还想接收数据,有么有其他思路能够解决,后续代码接收的问题呢谢谢??(我查了其他资料说是,关闭线程池之后无法在重启该线程池了)
//之后要上传数据的代码
@RequestMapping("/produce")
public void produce(HttpServletRequest request, HttpServletResponse response, KaiFaBan kaiFaBan){
//判断线程池是不是关闭
if(!exec.isShutdown()){
//线程池没有被关闭
exec.execute(new Runnable() {
@Override
public void run() {
try {
if(kaiFaBan != null){
queue.put(kaiFaBan);//阻塞
System.out.println("《生产者》把消息已存入队列中");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}else{
System.out.println("线程池已经被关闭");
}
}
如果是临时线程池,把 corePoolSize 给 0,keepAliveTime 给小一点就可以了,不需要关闭