本文翻译自http://tutorials.jenkov.com/java-util-concurrent/threadpoolexecutor.html,人工翻译,仅供学习交流。
ThreadPoolExecutor
java.util.concurrent.ThreadPoolExecutor是 ExecutorService接口的实现类。ThreadPoolExecutor使用它的一个内部先查池执行给定的任务(Callable或Runnable).
ThreadPoolExecutor中包含的线程池可以包含不同数量的线程。线程池中的线程数由以下变量决定:
- corePoolSize
- maximumPoolSize
当任务委托给线程池时,如果在线程池中创建的线程小于corePoolSize,然后创建一个新线程,即使池中存在空闲线程。
如果内部任务队列已满,并且corePoolSize数量的线程或更多正在运行,但是小于maximumPoolSize的线程正在运行,那么将创建一个新线程来执行任务。下面的图表演示了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明确指定所有这些参数,通常会使用java.util.concurrent.Executors类中的一个工厂方法,如ExecutorService一文所示。