线程池

什么是线程池

把线程进行池化,调用的时候直接去池里面去取,而不是每次去重新创建,不用的时候放回线程池,而不是直接销毁,从而达到复用。

为什么使用线程池

①复用线程,降低创建以及销毁导致的资源消耗。

②提高响应速度。

③提高线程的可管理性,提升系统稳定性。

ThreadPoolExecutor

JDK提供的线程池

ThreadPoolExecutor的构造方法有七个参数

int corePoolSize核心线程数

int maximumPoolSize约定的线程最大数量

long keepAliveTime线程空闲的时候存活多久(但会保留核心线程数的线程数量)

TimeUnit unit时间单位

BlockingQueueworkQueue线程超过核心线程数的部分放到阻塞队列中

ThreadFactory threadFactory线程工厂主要是给线程命名

RejectedExecutionHandler handler拒绝策略

缺省策略

RejectedExecutionHandler是一个接口,JDK提供了四种实现,如果都不合适,可以自己实现这个接口去处理。

DiscardOldestPolicy最早放入的先丢弃

AbortPolicy直接抛出异常,也是默认的策略

CallerRunsPolicy谁提交的谁执行

DiscardPolicy直接丢弃

合理配置线程池

任务的特性有关

CPU密集型 (大量计算型任务)不要超过机器上CPU同时运行的线程个数

IO密集型 (文件读写)2*CPU的个数(常见配置)

混合型 尽量进行拆分

你可能感兴趣的:(线程池)