java.util.concurrent.ThreadPoolExecutor
是 ExecutorService
(前面已经讲过)
接口的一个实现.
ThreadPoolExecutor使用其内部池线程之一执行给定任务(Callable
or Runnable
)。
ThreadPoolExecutor
内部的线程池包含了不能数量的线程,线程池中线程的数量可以通过以下变量来定义:
corePoolSize
maximumPoolSize
如果在将任务委派给线程池时在线程池中创建的线程小于corePoolSize,则会创建一个新线程,即使池中存在空闲线程。
当内部的队列中的任务满了,大于或者等于corePoolSize
的线程在运行,并且小于maximumPoolSize
的线程数在运行,那么一个新的任务被提交运行,下图说明了ThreadPoolExecutor
原理:
|
ThreadPoolExecutor |
创建ThreadPoolExecutor
ThreadPoolExecutor
有几个不同的构造函数,比如:
int corePoolSize = 5;
int maxPoolSize = 10;
long keepAliveTime = 5000;
ExecutorService threadPoolExecutor =
new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
keepAliveTime,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()
);
当然,创建ThreadPoolExecutor
时也自己明确指定这些参数,用ava.util.concurrent.Executors
中的工厂方法会容易的多,可以参考前面讲的的ExecutorService
。4
参考:http://tutorials.jenkov.com/java-util-concurrent/threadpoolexecutor.html