以ThreadPoolExecutor为例
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, // corePoolSize
4, // maximumPoolSize
20, // keepAliveTime
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(12) // workQueue with capacity 12
);
以上的创建方法在初始化创建时不会主动创建线程
可以使用executor.getPoolSize()得到当前线程池中的线程数;
上面的方法初始创建时得到的状态是
ThreadPool Status:
Core Pool Size: 2
Maximum Pool Size: 4
Current Pool Size: 0
Active Threads: 0
Task Count: 0
Completed Task Count: 0
Is Shutdown: false
Is Terminated: false
想要在创建线程池初始化的时候创建对应的核心线程,需要用到特殊设置可以使用 ThreadPoolExecutor 类中的 prestartCoreThread() 或 prestartAllCoreThreads() 方法。
- prestartCoreThread():预先启动一个核心线程。
- prestartAllCoreThreads():预先启动所有核心线程
corePoolSize对应的是线程池的核心线程数
maximumPoolSize是线程池的最大线程数
keepAliveTime默认对应的是线程池中的非核心线程的保活时间,只有在使用 executor.allowCoreThreadTimeOut(true) 方法来允许核心线程在空闲时间超时后被销毁。
TimeUnit.SECONDS,指定保活的时间单位
new ArrayBlockingQueue<>(12)对应线程池中的任务队列自定义为12

6710

被折叠的 条评论
为什么被折叠?



