Java多线程-线程池-ThreadPoolExecutor

本文深入解析了Java并发编程中的ThreadPoolExecutor构造方法,详细介绍了其七个参数的作用,包括核心线程数、最大线程数、空闲线程存活时间、时间单位、任务队列、线程工厂和任务拒绝策略。通过示例展示了如何创建线程池并提交任务,以及四种不同的任务拒绝策略的行为。理解这些参数有助于优化线程池配置,提高系统性能。

ThreadPoolExecutor

ThreadPoolExecutor构造方法的七个参数

  • int corePoolSize

    核心线程的数量,不能小于0

  • int maximumPoolSize

    最大线程数,不能小于0,最大数量 >= 核心线程数量

  • long keepAliveTime

    空闲线程最大存活时间,不能小于0

  • TimeUnit unit

    时间单位

  • BlockingQueue<Runnable> workQueue

    任务队列,不能为null

  • ThreadFactory threadFactory

    创建线程工厂,不能为null

  • RejectedExecutionHandler handler

    任务的拒绝策略, 不能为null

MyRunnable类

package com.cmy.myThreadpool;

/**
 * @author 陈明勇
 */
public class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "在执行了...");
    }
}

测试类

package com.cmy.myThreadpool;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author 陈明勇
 */
public class MyThreadPoolDemo3 {
    public static void main(String[] args) throws InterruptedException {
        /**
         * 1.核心线程的数量
         * 2.最大线程数
         * 3.空闲线程最大存活时间
         * 4.时间单位
         * 5.任务队列
         * 6.创建线程工厂
         * 7.任务的拒绝策略
         */
        ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 5, 2, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());

        pool.submit(new MyRunnable());
        pool.submit(new MyRunnable());

        pool.shutdown();
    }
}

pool.submit()调用此方法时,不使用lambda表达式,而是将MyRunnable类作为参数去执行

参数详解

  • TimeUnit unit 时间单位

    TimeUnit是一个枚举类,如果单位不是秒而是小时,则可以这样使用 -> TimeUnit.HOURS

  • BlockingQueue<Runnable> workQueue 任务队列

    让任务在队列中等着,等有线程空闲了,再获取任务并执行

  • ThreadFactory threadFactory 创建线程工厂

    按照默认方式创建线程对象

  • RejectedExecutionHandler handler 任务的拒绝策略

    • ① 什么时候拒绝任务

      当提交的任务 > 池中最大线程数量 + 队列容量

    • ② 如何去拒绝

      • 任务拒绝策略

        • a.ThreadPoolExecutor.AbortPolicy

          丢弃任务并抛出RejectedExecutionException异常,是默认的策略

        • b.ThreadPoolExecutor.DiscardPolicy

          丢弃任务,但是不抛出异常,不推荐使用

        • c.ThreadPoolExecutor.DiscardOlderstPolicy

          抛弃队列中等待最久的任务,然后把当前任务加入队列中

        • d.ThreadPoolExecutor.CallerRunsPolicy

          调用任务的run()方法绕过线程池直接执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员陈_明勇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值