线程池七大参数及执行过程

线程的创建和销毁是比较消耗资源的,使用线程池主要是为了资源的复用。

线程池由七个参数构成:

  1. 核心线程数

  2. 最大线程数

  3. 非核心线程存活时间

  4. 时间单位

  5. 阻塞队列

  6. 线程工厂

  7. 拒绝策略

线程池的执行流程:

  • 有任务需要执行,核心线程没满进入核心线程执行任务。

  • 核心线程已经满了还有新的任务进来这个任务就进入阻塞队列里面,在队列里面等待执行。

    • 如果等待的时间过长就会被jvm收回

  • 核心线程和阻塞队列都满了还有新的任务要进来就进入最大线程数里面,再开辟新的线程执行任务。

  • 如果线程都再执行还有新的任务进来就执行拒绝策略

     

### Java线程池的七个参数详解 Java中的`ThreadPoolExecutor`类提供了创建线程池的功能,其构造方法中有七个重要参数用于定义线程池的行为。以下是这些参数的作用说明: #### 1. **corePoolSize** 核心线程数是指即使处于空闲状态也会被保留在线程池中的最小线程数量。如果设置了允许核心线程超时(通过`allowCoreThreadTimeOut`),那么核心线程也可能在空闲一段时间后被销毁[^1]。 #### 2. **maximumPoolSize** 最大线程数表示线程池中可以容纳的最大线程数量。当工作队列已满且当前运行的线程数小于该值时,会继续创建新线程来执行任务。 #### 3. **keepAliveTime** 这是非核心线程闲置后的存活时间。一旦超过这个时间而仍然没有新的任务分配给它们,则会被终止并移除。需要注意的是,只有当线程的数量超过了`corePoolSize`时才会应用此规则;除非启用了前述提到的核心线程超时功能。 #### 4. **unit** 这是一个枚举类型的时间单位,用来指定上面`keepAliveTime`所使用的具体时间尺度,比如秒(`SECONDS`)、毫秒(`MILLISECONDS`)等。 #### 5. **workQueue** 工作队列是用来保存等待被执行的任务的对象集合。常见的实现包括无界阻塞队列 (`LinkedBlockingQueue`) 有界阻塞队列 (`ArrayBlockingQueue`) 等多种形式。不同的队列策略会影响整个系统的性能表现以及资源消耗情况。 #### 6. **threadFactory** 线程工厂是一个接口,它负责实际创建每一个工作者线程实例的过程。默认情况下使用的是系统自带的标准实现方式,但如果开发者希望自定义某些属性或者行为模式的话就可以提供自己的版本来进行替代操作。 #### 7. **handler** 拒绝策略处理器,在提交任务数超过 `maxmumPoolSize` 并且工作队列已经满了的情况下采取的一种处理机制。JDK 提供了几种内置的选择方案,例如抛异常 (AbortPolicy),调用者自行运行(CallrRunsPolicy)等等。 ```java // 创建一个具有固定大小的工作线程池的例子 ExecutorService executor = new ThreadPoolExecutor( 5, // corePoolSize 10, // maximumPoolSize 60L, // keepAliveTime TimeUnit.SECONDS, // unit new LinkedBlockingQueue<>(100), // workQueue Executors.defaultThreadFactory(), // threadFactory new ThreadPoolExecutor.AbortPolicy() // handler ); ``` 上述代码片段展示了如何利用这七项配置构建一个简单的线程池实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ming__GoGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值