Java多线程:ThreadPoolExecutor

ThreadPoolExecutor是JDK并发包提供的一个线程池服务,基于ThreadPoolExecutor可以很容易将一个Runnable接口的任务放入线程池中。

 

public ThreadPoolExecutor(int corePoolSize,  
                          int maximumPoolSize,  
                          long keepAliveTime,  
                          TimeUnit unit,  
                          BlockingQueue workQueue,  
                          RejectedExecutionHandler handler) {  
    this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,  
         Executors.defaultThreadFactory(), handler);  
}

 

 

 

参数解释

corePoolSize:核心线程数,会一直存活,即使没有任务,线程池会维护线程的最少数量。

maximumPoolSize:线程份维护线程的最大数量。

keepAliveTime:线程池维护线程所允许的空闲时间,当线程空闲时间达到keepAliveTime,该线程会退出,直到线程数量等于corePoolSize。如果allowCoreThreadTimeout设置为true,则所有线程均会退出直到线程数量为0.

unit:线程池维护线程所允许空闲时间的单位

workQueue:线程份所使用的缓冲队列

handler:线程池中的数量大于maximuPoolSize,对拒绝任务的处理策略。

Java多线程:ThreadPoolExecutor_第1张图片

 

(1)调用ThreadPoolExecutor的execute提交线程,首先检查CorePool,如果CorePool内的线程小于CorePoolSize,新创建线程执行任务。

(2)如果当前CorePool内的线程大于等于CorePoolSize,那么将线程加入到BlockingQueue。

(3)如果不能加入BlockingQueue,在小于MaxPoolSize的情况下创建线程执行任务。

(4)如果线程数据大于等于MaxPoolSize,那么执行拒绝策略。

 

最后欢迎大家访问我的个人网站:1024s​​​​​​​

你可能感兴趣的:(java)