JDK线程池有界队列

以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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值