立即学习:https://edu.csdn.net/course/play/26270/326867?utm_source=blogtoedu
一、 线程池的参数解释
1. corePoolSize
核心线程数,保持在线程池中激活的线程的数量
2. maximumPoolSize
线程池允许的最大线程数
3. keepAliveTime/timeUnit
线程池中线程空闲不被释放的自大时间,配合timeUnit使用,为0表示永远不被释放。
4. workQueue
BlockingQueue<Runnable>,工作线程任务的阻塞队列,用来存放等待执行的任务,默认实现:LinkedBlockingQueue
5. threadFactory
线程池创建工厂,子类通过自定义实现接口,"Thread newThread(Runnable)" 通过工厂创建线程具体的Thread线程。默认实现:DefaultThreadFactory
6. handler(RejectedExecutionHandler)
当workQueue无法存放新加任务,或添加新任务后线程池停止工作,使用设置拒绝策略 拒绝新加任务的执行,可以使用rejectedExecution来实现自己的拒绝策略。默认拒绝策略:AbortPolicy,直接抛出异常
二、JAVA 提供的 4 种拒绝策略
1. CallerRunsPolicy:调用方执行策略,当前调用线程活添加任务的线程执行,这种方式当线程池无法执行时,使用调用方资源来执行任务
2. AbortPolicy:异常策略,直接抛出 RejectedExecutionException异常
3. DiscardPolicy:直接抛弃异常,对任务不做任何事情,忽略该任务,不执行,不报错。
4. DiscardOldestPolicy:抛弃最早任务策略,将 workQueue 的一个任务取出抛弃,将当前任务放入 workQueue 中执行。
三、线程池的 5 种状态
RUNNING:初始状态,运行中
SHUTDOWN:关闭状态,shutdown()方法后变为该状态,不再接受新任务,仍处理已添加任务
STOP:停止状态,调用shutdownNow()方法后RUNNING状态进入到这个状态,此时不接受新任务,并且会将执行中的线程中断。
TIDYING:整理状态,此时队列中的任务数量已经是 0
TERMINATED:终结状态,由TIDYING状态后调用terminated()后进入该状态