java中的ThreadPoolExecutor
ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler)
参数说明:
corePoolSize: 是指保留的线程池的线程数大小。
keepAliveTime: 空闲线程的结束时间。这个是指线程数超出corePoolSize(小于maximumPoolSize)时,线程idle推出的超时时间。
unit:unit 是一个枚举,表示 keepAliveTime 的单位。
TimeUnit.DAYS,表示天
TimeUnit.HOURS,表示小时
TimeUnit.MINUTES,表示分钟
TimeUnit.SECONDS,表示秒
TimeUnit.MICROSECONDS,表示微妙
workQueue: 表示存放任务的队列
handler: 描述超过处理能力的任务怎么处理的句柄
workQueue 有三种实现方式:
a) 如果正在运行的线程数小于corePoolSize,当有新任务来时,线程池都会创建新的线程来运行新任务
b) 如果正在运行的线程数等于或大于corePoolSize(<maximumPoolSize),并且workQueue队列没满时,线程池会将新任务加入到workQueue队列中
c) 如果正在运行的线程数大于corePoolSize(<maximumPoolSize),并且workQueue队列满时,线程池会创建新的线程来运行新的任务
d)如果正在运行的线程数等于或大于maximumPoolSize,并且workQueue队列满时,线程池会按照handle方式来处理新的任务请求
2,SyncronousQueue
此时队列的大小为0,每个新任务都将创建一个新线程去运行它。
此种队列是一种无限制的队列,使用它会导致当corePoolSize个线程都繁忙时,所有其他请求都将会加入到队列里,此时参数maximumPoolSize将会失效,线程数不会多过corePoolSize。
更多信息可以查看:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html