JUC 自定义线程池
一、七个参数
int corePoolSize, // 常驻线程数量(核心) int maximumPoolSize, // 最大线程数量 long keepAliveTime, // 线程存活时间 TimeUnit unit, // 线程存活单位 BlockingQueue<Runnable> workQueue, // 阻塞队列 ThreadFactory threadFactory, // 线程工厂 RejectedExecutionHandler handler // 拒绝策略
先常驻线程->阻塞队列->最大线程
二、拒绝策略
1、AbortPolicy(默认):直接抛出异常,阻止系统正常运行
2、CallerRunsPolicy:不抛出异常,而是将任务退回给调用者
3、DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务
4、DiscardPolicy:不给予任何处理也不抛出异常,如果允许任务丢失,这是最好的一种策略
三、案例
package com.wt.pool; import java.util.concurrent.*; /** * @Description: TODO * @Author: 1872428 * @Date: 2025/6/2 15:47 * @Version: 1.0 **/ public class Demon02 { public static void main(String[] args) { ExecutorService executor = new ThreadPoolExecutor( 5, 20, 2L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(8), Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy() ); try { for (int i = 1; i <= 10; i++) { executor.execute(()->{ System.out.println(Thread.currentThread().getName() + ">>>正在执行"); }); } } finally { executor.shutdown(); } } }