线程池

102 阅读3分钟

线程池根据字面理解就是装线程的池子,至于线程是什么?

线程

玩电脑的都明白什么是进程,其实电脑上每一个软件就是一个线程,如果你的电脑里存在360杀毒软件,那么更容易明白我的意思
360这个软件就是一个进程,其内部存在电脑清理,木马杀毒,软件卸载,定期扫描等等。可以被我们选择的任务,而这些任务就相当于一个个的线程。
再或者用一个教室比作进程,那么每一个学生就是线程。
简而言之,进程就是一个容纳线程的容器,而进程是执行任务的最小单位。

image.png

线程实现方式

线程有三种实现方式
一. 继承Thread类,然后会继承Thread类下的run方法,执行run方法即为执行线程任务
二. 实现Runnable接口,runnable重写run方法,执行后即为执行线程任务
三. 实现方式Callable,重写run方法,执行后即为执行线程任务

线程池

在使用线程池时,任务被提交到线程池中,然后由其中的线程去执行。线程池管理着一定数量的线程,它会动态地管理线程的数量,根据需要增加或减少线程的数量。当有新任务到来时,线程池中的线程会被唤醒来执行任务;当任务执行完毕后,线程会返回线程池等待下一个任务的到来。

线程池的好处包括:

  1. 降低线程创建和销毁的开销:线程的创建和销毁是一项耗费系统资源的操作,使用线程池可以避免频繁地创建和销毁线程,提高系统的性能。
  2. 控制并发线程的数量:线程池可以限制并发线程的数量,避免过多的线程竞争资源,从而提高系统的稳定性。
  3. 提供任务队列:线程池通常会提供一个任务队列,用于存储等待执行的任务,确保任务按照一定的顺序执行。
  4. 具备线程管理和调度的功能:线程池可以管理线程的创建、销毁和调度等操作,提供更灵活和方便的线程管理方式。

值得提一句的事,线程池中不是说存在多少线程就有线程,而是有多少任务唤醒多少线程才有多少线程,当没有任务的时候,线程池中就不存在线程。

线程池七大参数

 1. 核心线程数(Core Pool Size):线程池中保持的最小线程数,即使线程处于空闲状态,也不会被回收。 
 2. 最大线程数(Maximum Pool Size):线程池中允许的最大线程数,当任务数量超过核心线程数且工作队列已满 时,线程池会创建新的线程,直到达到最大线程数。 
 3. 空闲线程存活时间(Keep Alive Time):当线程池中的线程数量超过核心线程数时,空闲线程的存活时间。超 过这个时间,空闲线程会被回收,直到线程池中的线程数量不超过核心线程数。
 4. 时间单位(Time Unit):空闲线程存活时间的单位,例如毫秒、秒、分钟等。
 5. 工作队列(Work Queue):用于存储等待执行的任务的队列。当线程池中的线程都在执行任务时,新的任务会被 放入工作队列中等待执行。
 6. 线程工厂(Thread Factory):用于创建新线程的工厂类。
 7. 拒绝策略(Rejected Execution Handler):当线程池已经达到最大线程数且工作队列已满时,新的任务无法 被执行时的处理策略。常见的拒绝策略包括抛出异常、丢弃任务、丢弃最旧的任务等。