• 8.关闭线程池shoudown的方法


    关闭线程池shutdown方法

    这一节我们来shoudown方法,该方法的作用是关闭现身池,一般我们用它的时候都是写在finally大模块中,

    为什么要关闭现身池?如果线程池用完不关闭的话,程序就不会结束,但是你关闭它的话程序才会结束。

    shoudown方法它有两个特点,

    第一个特点是调用shoudown方法关闭线程池以后,线程池不再接收新任务。

    第二个特点是他会继续执行完任务队列中的任务。

    不再接收新任务

    首先来看第一个特点,不再接收新任务,shoudown方法一旦调用线程池就会被关闭,

    shoudown假如池中还有正在执行的任务,他们不会被中断,而是继续执行完。

    此时如果有新任务提交的话,线程池根本不会理会,而且还会根据当时设置的任务拒绝策略来拒绝它。

     

    下面我们来演示这一特点,编写一个任务task。每个任务都有一个任务编号,这样做的目的是方便观察任务执行情况,任务内容是输出当前线程名称和任务编号,接下来我们来执行该任务。

    使用threadpoolexecutor创建线程池,核心线程数和最大线程数都是一,空闲线程存活时间是0秒,也就是不销毁空闲线程,任务队列采用的是linkedblockingqueue队列长度为一,只能存放一个任务任务,拒绝策略采用的是abortpolicy抛出拒绝执行异常。接着向线程池中提交一个任务任务编号为一使用try---catch捕获拒绝执行异常。写上finally大碗块,在finally大板块中调用shoudown方法关闭线程池池,关闭以后再提交一个任务任务编号为二,至此论方法编写完成,整个例子也编写完成。 



    执行程序观察执行结果,

    从执行结果来看,程序输出一以后发生了拒绝执行异常,说明线程池在关闭后拒绝了任务2,符合预期。

    继续执行完任务队列中的任务

    看完了第一个特点,再来看第二个特点,继续执行完任务队列中的任务,假设任务队列中还有一个任务三没有执行,

    他不会被抛弃,线程池会继续执行完,他直到任务队列中所有的任务都执行完,

     

     

    限制池才会彻底的关闭。

    下面我们来演示这一特点,还是沿用之前的例子,只不过需要在线程池关闭之前再提交一个任务任务编号为三,至此例子改写完成

    再来执行程序看,看从执行结果来看,程序输出一和三还有拒绝执行异常,

    说明线程池关闭以后,继续把任务队列中的三号任务执行完了,但第二个任务依然是被拒绝了,这次测试结果完全符合预期。 



     总结

    最后总结一下本节内容,本节介绍了关闭现身池的方法,shoudown它的作用及用法,这里就不再赘述了,在实际开发中只要是用到线程池的地方,就会用到它本节的代码地址如下,大家如果有需要的话可以前去查看。 


    附录:

    笔记完整文本:

    这一节我们来shoudown下葬方法,该方法的作用是关闭现身池,一般我们用它的时候都是写在finally大模块中,为什么要关闭现身池?如果线程池用完不关闭的话,程序就不会结束,但是你关闭它的话程序才会结束。shoudown方法它有两个特点,第一个特点是调用下档方法关闭线程池以后,线程池不再接收新任务。第二个特点是他会继续执行完任务,队列中的任务。首先来看第一个特点,不再接收新任务,下档方法一旦调用线程池就会被关闭,假如池中还有正在执行的任务,他们不会被中断,而是继续执行完。此时如果有新任务提交的话,线程池根本不会理会,而且还会根据当时设置的任务拒绝策略来拒绝它。 下面我们来演示这一特点,编写一个任务task。每个任务都有一个任务编号,这样做的目的是方便观察任务执行情况,任务内容是输出当前线程名称和任务编号,接下来我们来执行该任务。使用threadpoolexecutor创建线程池,核心线程数和最大线程数都是一,空闲线程存活时间是0秒,也就是不销毁空闲线程,任务队列采用的是linkedblockingqueue队列长度为一,只能存放一个任务任务,拒绝策略采用的是abortpolicy抛出拒绝执行异常。接着向线程池中提交一个任务任务编号为一使用try---catch捕获拒绝执行异常。写上finally大碗块,在finally大板块中调用shoudown方法关闭线程池池,关闭以后再提交一个任务任务编号为二,至此论方法编写完成,整个例子也编写完成。 执行程序观察执行结果,从执行结果来看,程序输出一以后发生了拒绝执行异常,说明线程池在关闭后拒绝了任务2,符合预期。看完了第一个特点,再来看第二个特点,继续执行完任务队列中的任务,假设任务队列中还有一个任务三没有执行,他不会被抛弃,线程池会继续执行完,他直到任务队列中所有的任务都执行完,限制池才会彻底的关闭。下面我们来演示这一特点,还是沿用之前的例子,只不过需要在线程池关闭之前再提交一个任务任务编号为三,至此例子改写完成。再来执行程序看,看从执行结果来看,程序输出一和三还有拒绝执行异常,说明线程池关闭以后,继续把任务队列中的三号任务执行完了,但第二个任务依然是被拒绝了,这次测试结果完全符合预期。 最后总结一下本节内容,本节介绍了关闭现身池的方法,shoudown它的作用及用法,这里就不再赘述了,在实际开发中只要是用到线程池的地方,就会用到它本节的代码地址如下,大家如果有需要的话可以前去查看。

     

  • 相关阅读:
    java异常
    Swfmill概述
    AS3中e4x用法纲要
    抽象工厂模式(Abstract Factory)
    动态绑定、抽象类、接口
    Form中Trigger的执行顺序
    Form 中FND_Message的用法总结
    Form属性、内置子程序、触发器、系统变量
    Oracle EBS R12 XML数据表格的Excel脚本报表 PLUS :问题杂烩
    Oralce EBS Alert
  • 原文地址:https://www.cnblogs.com/cj8357475/p/16030748.html
Copyright © 2020-2023  润新知