砍材农夫砍材农夫
  • java
  • redis
  • mysql
  • 场景类
  • vuepress搭建
  • hexo搭建
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI工具
  • MCP
  • AI集成框架
  • 相关算法
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • java
  • redis
  • mysql
  • 场景类
  • vuepress搭建
  • hexo搭建
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI工具
  • MCP
  • AI集成框架
  • 相关算法
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 基础面试题

    • 基础面试
    • 双亲委派
    • 关于锁
  • 线程并发

    • 线程
    • 线程安全
    • 线程实现方式
    • 线程相关属性
    • Thread和Object相关方法
    • 线程异常
    • 线程池
  • 高并发(JUC|AQS)

    • concurrency
    • AbstractQueuedSynchronizer
    • CountDownLatch
    • Semaphore
    • CyclicBarrier
    • ReentrantLock
    • Future/FutureTask
    • Fork/Join
    • BlockingQueue
    • ArrayBlockingQueue
    • DelayQueue
    • PriorityBlockingQueue
  • 集合相关

    • 集合相关
  • jvm

    • jvm概览
    • 垃圾标记算法
    • 垃圾回收算法
    • jvm监控相关工具
    • jvm内存调优
  • 锁

    • synchronized
  • ThreadPoolExecutor
  • 几种创建方式
  • Executors 创建的线程池(demo)
  • ThreadPoolExecutor 创建的线程池(demo)
  • 代码

ThreadPoolExecutor

相关参数:

  • corePoolSize: 线程池中的核心线程数,默认情况下,核心线程会一直存活,即使它们是空的。
  • maximumPoolSize: 线程池中的最大线程数,默认情况下,线程池中的线程数不会超过这个值。
  • keepAliveTime: 当线程数大于核心线程数时,多余的空闲线程会在多长时间内被销毁。
  • unit: keepAliveTime参数的单位。
  • workQueue: 线程池中的任务队列,用于存放待处理的任务。
    • ArrayBlockingQueue:有界队列,容量固定。
    • LinkedBlockingQueue:无界队列(默认容量为 Integer.MAX_VALUE),可能导致内存溢出。
    • SynchronousQueue:不存储元素的队列,每个插入操作必须等待另一个线程的移除操作。
    • PriorityBlockingQueue:带优先级的无界队列
  • threadFactory: 创建新线程的工厂,默认情况下,线程池会创建新的线程
  • handler: 当线程池中的任务队列已满时(拒绝策略)
    • AbortPolicy:默认策略,直接抛出 RejectedExecutionException 异常。
    • DiscardPolicy:直接丢弃任务,不抛出异常。
    • DiscardOldestPolicy:丢弃队列中最旧的任务,然后重新尝试执行任务。
    • CallerRunsPolicy:调用者所在的线程来执行任务。

几种创建方式

通过 Executors 创建的线程池
通过 ThreadPoolExecutor 创建的线程池
Executors.newFixedThreadPool:创建⼀个固定⼤⼩的线程池,可控制并发的线程数,超出的线程会在队列中等待
Executors.newCachedThreadPool:创建⼀个可缓存的线程池,若线程数超过处理所需,缓存⼀段时间后会回收,若线程数不够,则新建线程
Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执⾏顺序
Executors.newScheduledThreadPool:创建⼀个可以执⾏延迟任务的线程池
Executors.newSingleThreadScheduledExecutor:创建⼀个单线程的可以执⾏延迟任务的线程池
Executors.newWorkStealingPool:创建⼀个抢占式执⾏的线程池(任务执⾏顺序不确定)【JDK1.8 添加】
ThreadPoolExecutor:最原始的创建线程池的⽅式,它包含了 7 个参数可供设置,后⾯会详细讲

Executors 创建的线程池(demo)

package com.jysemel.java.basic.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorsDemo {
    public static void main(String[] args) {
        // 创建一个线程池
        ExecutorService executor = Executors.newCachedThreadPool();
        // 创建10个任务并执行
        for (int i = 0; i < 10; i++) {
            executor.execute( () -> {
                System.out.println(Thread.currentThread().getName() + "正在执行");
            });
        }
        // 结束任务
        executor.shutdown();
    }
}

ThreadPoolExecutor 创建的线程池(demo)

package com.jysemel.java.basic.thread;

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

public class ThreadPoolExample {

    protected static final AtomicInteger count = new AtomicInteger(1);

    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 10, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(4),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardPolicy()
        );
        for (int i = 0; i < 10; i++) {
            executor.execute(() -> {
                System.out.println(Thread.currentThread().getName() + " 执行任务");
                try {
                    count.getAndAdd(1);
                    Thread.sleep(TimeUnit.SECONDS.toMillis(10));
                } catch (InterruptedException e) {
                    System.out.println("--------------");
                }
            });
        }
        System.out.println("所有任务提交完毕" + count.get());
        executor.shutdown();
    }
}

代码

代码

最近更新: 2026/1/17 12:11
Contributors: jysemel, kcnf
Prev
线程异常