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 有三种实现方式:

1,ArrayBlockingQueue

a) 如果正在运行的线程数小于corePoolSize,当有新任务来时,线程池都会创建新的线程来运行新任务

b) 如果正在运行的线程数等于或大于corePoolSize(<maximumPoolSize),并且workQueue队列没满时,线程池会将新任务加入到workQueue队列中

c) 如果正在运行的线程数大于corePoolSize(<maximumPoolSize),并且workQueue队列满时,线程池会创建新的线程来运行新的任务

d)如果正在运行的线程数等于或大于maximumPoolSize,并且workQueue队列满时,线程池会按照handle方式来处理新的任务请求

 

2,SyncronousQueue

此时队列的大小为0,每个新任务都将创建一个新线程去运行它。

 

3, LinkedBlockingQueue

此种队列是一种无限制的队列,使用它会导致当corePoolSize个线程都繁忙时,所有其他请求都将会加入到队列里,此时参数maximumPoolSize将会失效,线程数不会多过corePoolSize。

 

更多信息可以查看:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

posted @ 2012-05-06 17:03  活出敢型  阅读(301)  评论(0编辑  收藏  举报