zoukankan      html  css  js  c++  java
  • 线程池源码解读

    未完待续

    jdk:1.8.0_65

    1.线程池类图

      由图可见,线程池入口为Executors,实现逻辑在ThreadPoolExecutor

    2.线程池状态,以及如何转换

     1         //运行中
     2         private static final int RUNNING    = -1 << COUNT_BITS;
     3         //关闭,执行完当前线程,以及阻塞队列中线程
     4         private static final int SHUTDOWN   =  0 << COUNT_BITS;
     5         //停止,停止正在执行的线程
     6         private static final int STOP       =  1 << COUNT_BITS;
     7         //过渡阶段,所有线程执行完成,包括阻塞对了中的线程
     8         private static final int TIDYING    =  2 << COUNT_BITS;
     9         //终止。线程池调用terminated()后的状态
    10         private static final int TERMINATED =  3 << COUNT_BITS;

    3.线程池种类

    newCachedThreadPool 缓存型线程池,首先查看线程池中是否有以前建立的线程池,如果有就reuse,没有就新建一个线程入池

    newFixedThreadPool(2) 固定数量线程的线程池

    newSingleThreadExecutor 单线程的线程池,即任意时间线程池中只有一个线程

    newScheduledThreadPool(4) 调度型线程池,这个线程池中的线程按照schedule依次delay执行

    newSingleThreadScheduledExecutor

    4.创建线程池

    线程池六个参数:

    核心线程数

    最大线程数

    空闲的线程保留时间

    空闲线程保留时间单位

    阻塞队列,存储等待执行的任务

    线程工厂,用来创建线程

    5 停止线程的三种方式

    1)使用stop强行终止正在运行或是挂起的线程 thread.stop()。此方法不安全,

    2)使用退出标志,使线程正常退出,当run方法完成后线程终止。针对不停止的线程无效。

    3)使用interrupt中断线程,Thread.currentThread().interrupt(),当interrupt被调用的时候,InterruptedExecution将被抛出,故可以设计时在run方法中捕获异常,让线程安全退出。

      

    6.源码解读,以及流程图

    7.线程池如何做到重用线程

  • 相关阅读:
    全排列算法的全面解析
    排序算法系列:插入排序算法
    MySQL多表查询核心优化
    Python代码优化及技巧笔记(二)
    深入理解Lambda
    Unity游戏逻辑服务器实践
    Java设计模式——迭代器模式
    Java设计模式——原型模式
    insert 加的锁
    区间锁
  • 原文地址:https://www.cnblogs.com/guobm/p/10075225.html
Copyright © 2011-2022 走看看