Java 线程池

组成:

    核心池

    队列



主要参数:

    核心池大小;

    最大线程数;

    队列大小;

    活动保持时间;(无任务执行是任务多久关闭)


创建:

(1)    new ThreadPoolExecutor();


 (2)Executors的静态方法

        单个线程的线程池

        缓存的线程池

        固定大小的线程池

        定时线程池


        Executors的静态方法底层依旧是调用ThreadPoolExecutor()


添加线程:

   (1) exeute()

    无返回值,无法得知添加的状况

    (2)submit()

    会返回一个Future对象,可以用来获得线程的各种状态


向线程池中添加线程:

核心池是否已满?-->>否:在线程池离创建线程/是:->>队列是否已满?否:在队列中创建线程/是:->>是否达到线程池最大数目?否:在线程池中添加线程/是:拒绝策略

拒绝策略:

    AboutPolicy    不添加,返回异常

    DiscardPolicy  不添加,返回异常

    DiscardPolicy  将当前的第一个任务替换成当前新任务

    CallerRunPolicy 拒绝新任务

关闭:

    shutdown()

    shutdownNow()

  [1]: https://juejin.im/post/5b3cf259e51d45194e0b7204


  源码分析


  The runState provides the main lifecycle control, taking on values:

    *

    *  RUNNING:  Accept new tasks and process queued tasks

    *  SHUTDOWN: Don't accept new tasks, but process queued tasks

    *  STOP:    Don't accept new tasks, don't process queued tasks,

    *            and interrupt in-progress tasks

    *  TIDYING:  All tasks have terminated, workerCount is zero, 过度状态

    *            the thread transitioning to state TIDYING

    *            will run the terminated() hook method

    *  TERMINATED: terminated() has completed


  https://mp.weixin.qq.com/s/6Wil_y3wAFjtA0wjaZNLBQ

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在日常开发中,线程池是使用非常频繁的一种技术,无论是服务端多线程接收用户请求,还是客户端多线程处理数据,都会用到线...
    和帅_db6a阅读 3,923评论 0 0
  • Tip:基于JDK1.8 一、线程 1:如何实现多线程:继承Thread类 ,实现Runnable接口,实现Cal...
    jjjjxd阅读 3,555评论 0 0
  • 前言:线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一...
    SDY_0656阅读 4,160评论 0 1
  • 真正的孤独是生活在一群无法让你做自己的好人中间。 这是伊迪丝·华顿的一句话。孤独,对每个人来说都不陌生,孤独,是一...
    藝鬱阅读 6,618评论 0 0
  • 上海松科--倪显忠 感谢 1、感谢老婆早起准备好早餐。 2、感谢老婆一早送我到地铁站。 3、感谢小朋友给我带来快乐...
    d94b51782f34阅读 1,715评论 0 0

友情链接更多精彩内容