线程池的分类:
1. newCachedThreadPool:创建一个可进行缓存重复利用的线程池。
2. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,
线程池中的线程处于一定的量,可以很好的控制线程的并发量。
3. newSingleThreadExecutor : 创 建 一 个 使 用 单 个 worker 线 程 的Executor ,
以无界队列方式来运行该线程。线程池中最多执行一个线程,之后提交的线程将会排在队列中以此执行。
4. newSingleThreadScheduledExecutor:创建一个单线程执行程序,
它可安排在给定延迟后运行命令或者定期执行。
5. newScheduledThreadPool:创建一个线程池,它可安排在给定延迟后运行
命令或者定期的执行。
6. newWorkStealingPool:创建一个带并行级别的线程池,并行级别决定了
同一时刻最多有多少个线程在执行,如不传并行级别参数,将默认为当前系统的 CPU 个数。
线程池的工作过程如下:
1. 线程池首先判断核心线程池里的线程是否已经满了。如果不是,则创建一个新的工作线
程来执行任务。否则进入。
2. 判断工作队列是否已经满了,倘若还没有满,将线程放入工作队列。否则进入 。
3. 判断线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行。
如果线程池满了,则交给饱和策略来处理任务。
相关的参数:
corePoolSize:核心线程池的大小
maximumPoolSize:线程池能创建线程的最大个数
keepAliveTime:空闲线程存活时间
unit:时间单位,为 keepAliveTime 指定时间单位
workQueue:阻塞队列,用于保存任务的阻塞队列
threadFactory:创建线程的工程类
handler:饱和策略(拒绝策略)