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();
        }
    }
}

 

posted @ 2025-06-02 16:00  市丸银  阅读(7)  评论(0)    收藏  举报