JAVA线程池分类,参数,执行方法

分类 

1. newCachedThreadExcutor
大小为0, 60s存活, 使用同步队列实现, 最大数为int最大值, 适用于短期异步或者负载比较轻的情况下

2. newFixedThreadExcutor
固定大小的线程池, 存活时间不限. 且新增则进入阻塞队列. 适用于长期任务的执行

3. newSingleThreadExcutor
单线程的线程池, 时间无限, 适用于一个任务接着一个任务的执行

4. SeceduledThreadPool
定时任务的线程池
 

java线程池创建各个参数的作用

线程池可以通过ThreadPoolExecutor来创建,我们来看一下它的构造函数:

 

 

 

JAVA线程池执行流程,即对应execute()方法:

提交一个任务,线程池里存活的核心线程数小于线程数corePoolSize时,线程池会创建一个核心线程去处理提交的任务。

如果线程池核心线程数已满,即线程数已经等于corePoolSize,一个新提交的任务,会被放进任务队列workQueue排队等待执行。

当线程池里面存活的线程数已经等于corePoolSize了,并且任务队列workQueue也满,判断线程数是否达到maximumPoolSize,即最大线程数是否已满,如果没到达,创建一个非核心线程执行提交的任务。

如果当前的线程数达到了maximumPoolSize,还有新的任务过来的话,直接采用拒绝策略处理。

四种拒绝策略

AbortPolicy(抛出一个异常,默认的)

DiscardPolicy(直接丢弃任务)

DiscardOldestPolicy(丢弃队列里最老的任务,将当前这个任务继续提交给线程池)

CallerRunsPolicy(交给线程池调用所在的线程进行处理)