技术文章 > java >  java基础 > 正文

java中关闭ExecutorService

小妮浅浅

ExecutorService除了可以对线程池进行管理外,最大的优势在于它可以进行关闭。不过要借用其中的一些关闭方法:shutdown()和shutdownNow(),和ExecutorService结合一起作用于线程池。下面就关闭线程池的方法进行分析,然后展示关闭方法的使用,最后结合ExecutorService关闭实例分享给大家。

1.关闭线程池

可以调用shutdown()或shutdownNow()来关闭线程池,其中原理是遍历所有工作线程,然后逐个调用线程的interrupt()来进行中断。但是它们存在一定的区别,shutdownNow首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列表,而shutdown只是将线程池的状态设置成SHUTDOWN状态,然后中断所有没有正在执行任务的线程。

2.关闭方法

shutdown(): Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,线程池就会关闭,拒绝新提交的任务, 终止前允许执行以前提交的任务,包括队列中的任务。

shutdownNow():会将线程池关闭,拒绝新提交的任务,对于正在运行的线程进行打断,阻塞的队列中任务也会打断。这里会返回所有没有开始的任务。

isShutdown():是否关闭

isTerminated():是否所有的任务已经完成,如果完成则返回true

3.实例

如果程序通过 main() 方法启动,并且主线程退出了你的程序,如果还有活动的 ExecutorService 存在于程序中,存在于 ExecutorService 中的活动线程会阻止Java虚拟机关闭。

ExecutorService executorService = Executors.newCachedThreadPool();
 
//开启异步线程
executorService.execute(new SendRestult(processService, jsonString, approvalFlag, lesseeId));
 
 
public final class SendRestult implements Runnable {
 
    private IProcessService processService;
    private String params;
    private Integer approvalFlag;
    private String lesseeId;
 
    public SendRestult(IProcessService processService, String jsonData, Integer approvalFlag, String lesseeId) {
        this.processService = processService;
        this.params = jsonData;
        this.approvalFlag = approvalFlag;
        this.lesseeId = lesseeId;
    }
 
    @Override
    public void run() {
        try {
            //调用第三方接口
            processService.invokeSendStatusData(params, approvalFlag, lesseeId);
        } catch (Exception e) {
            logger.error("异步推送出现了问题:", e);
        }
    }
}

以上就是java中关闭ExecutorService的方法,相信在关闭线程池的同时,也学会了shutdown等方法的使用。学会后就赶快动手尝试下吧。

免费视频教程
本文原创发布python学习网,转载请注明出处,感谢您的尊重!
相关文章
 java中对象头的用法
 对象头在java中的结构有哪几种
 java中ThreadLocal是什么
 java threadLocal源码探究
 java中executor是什么意思
 java executor框架的应用
 java中ExecutorService有几种创建方法
相关视频章节
 网络爬虫
 云端部署Web应用程序视频
 Web应用框架Flask和文件模板
 Web应用程序开发概述
 继承和多态
作者信息

小妮浅浅

认证0级讲师

最近文章
java编译命令是什么517
java的jdk是什么407
java Wrapper类的使用806
推荐视频
视频教程分类