关闭线程池后,该如何处理后发过来的代码

发布于 2022-09-12 23:46:59 字数 1599 浏览 10 评论 0

//安全的终止所有任务

@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("线程池已经被关闭");
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月寒剑心 2022-09-19 23:46:59

如果是临时线程池,把 corePoolSize 给 0,keepAliveTime 给小一点就可以了,不需要关闭

半衾梦 2022-09-19 23:46:59

别关闭线程池,它没任务了,自然就不会运行了。如过担心资源占用太多,把核心线程设置小点就行了。

花开柳相依 2022-09-19 23:46:59

一般不用关闭线程池,如果担心线程池造成的资源浪费,可以corePoolSize设置小一点。但是,如果设置为0的话,在没有线程时,线程池会自动关闭。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文