4-13-线程池原理

文章目录
  1. 1. 线程池原理
    1. 1.1. 主要特点
    2. 1.2. 线程复用
    3. 1.3. 线程池的组成
      1. 1.3.1. 1.线程池管理器
      2. 1.3.2. 2.工作线程
      3. 1.3.3. 3.任务接口
      4. 1.3.4. 4.任务队列
    4. 1.4. 线程池工作过程
    5. 1.5. threadpoolexecutor构造参数
      1. 1.5.1. 1.corepoolsize核心线程数
      2. 1.5.2. 2.maxpoolsize最大线程数
      3. 1.5.3. 3.keepalivetime超过core多余空闲线程存活时间
      4. 1.5.4. 4.timeUnit
      5. 1.5.5. 5.workQueue任务队列
      6. 1.5.6. 6.threadFactory线程工厂,用于创建线程
      7. 1.5.7. 7.handler拒绝策略
    6. 1.6. 拒绝策略(实现rejectedExecutionHandler接口)
      1. 1.6.1. 1.abortPolicy直接抛出异常
      2. 1.6.2. 2.callerRunsPolicy直接在调用者线程中运行当前被丢弃的任务,性能可能急剧下降
      3. 1.6.3. 3.discardOldestPolicy丢弃最早加入队列的,然后把这个任务放到队列
      4. 1.6.4. 4.discardPolicy默默丢弃

线程池原理

主要特点

线程复用;控制最大并发数;管理线程。

线程复用

  1. thread的start启动线程会调用runnable的run方法。
  2. 我们可以继承重写thread类,在其start方法中添加不断循环调用传递过来的runnable对象。
  3. 循环方法中不断获取runnable是用queue实现,在获取下一个runnable之前可以是阻塞的。

线程池的组成

1.线程池管理器

创建并管理线程池

2.工作线程

线程池中的线程

3.任务接口

每个任务必须实现的接口,用于工作线程调度其运行

4.任务队列

用于存放待处理任务,提供一种缓冲机制

线程池工作过程

  1. 如果小于core,马上创建线程运行
  2. 大于或等于,将任务放到队列
  3. 队列满了,运行线程小于max,那创建非核心线程来运行
  4. 大于或等于max,按照handler的拒绝方式来处理
  5. 当一个线程无事可做,超过keepaliveTime,如果线程数大于core,线程会被停掉。
  6. 所有任务完成,会收缩到core大小

threadpoolexecutor构造参数

1.corepoolsize核心线程数

2.maxpoolsize最大线程数

3.keepalivetime超过core多余空闲线程存活时间

4.timeUnit

5.workQueue任务队列

6.threadFactory线程工厂,用于创建线程

7.handler拒绝策略

拒绝策略(实现rejectedExecutionHandler接口)

1.abortPolicy直接抛出异常

2.callerRunsPolicy直接在调用者线程中运行当前被丢弃的任务,性能可能急剧下降

3.discardOldestPolicy丢弃最早加入队列的,然后把这个任务放到队列

4.discardPolicy默默丢弃