原文网址:Java线程池--核心参数/大小设置/使用示例_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java线程池的用法。包括:主要的参数、线程池大小的设置、使用步骤、使用实例。
核心参数
ThreadPoolExecutor原型:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
- corePoolSize
- 线程池的核心线程数
- 即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。
- maximumPoolSize
- 最大线程数。
- 超过此数量,会触发拒绝策略。
- keepAliveTime
- 线程的存活时间。
- 当线程池里的线程数大于corePoolSize时,如果等了keepAliveTime时长还没有任务可执行,则线程退出。
- unit
- 指定keepAliveTime的单位
- 比如:秒:TimeUnit.SECONDS。
- workQueue
- 一个阻塞队列,提交的任务将会被放到这个队列里。
- threadFactory
- 线程工厂,用来创建线程
- 主要是为了给线程起名字,默认工厂的线程名字:pool-1-thread-3。
- handler
- 拒绝策略
- 当线程池里线程被耗尽,且队列也满了的时候会调用。
- 默认拒绝策略为AbortPolicy。即:不执行此任务,而且抛出一个运行时异常
java doc的建议
java doc不提倡我们直接使用ThreadPoolExecutor,而是使用Executors类中提供的几个静态方法来创建线程池,例如:Executors.newCachedThreadPool(); Executors.newSingleThreadExecutor(); 等。
大公司的建议
很多大公司会明确要求使用创建ThreadPoolExecutor对象的方法来使用线程池,因为这样能使人明确各个参数的具体含义。Executors类中提供的静态方法都是调用了创建ThreadPoolExecutor对象的方法,例如:
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
个数(大小)设置
上边是文章的部分内容,为便于维护,全文已迁移到此网址:Java线程池-核心参数/大小设置/使用示例 - 自学精灵