Java线程池菜鸟教程

Java线程池基础概念

Java线程池是一种多线程处理形式,处理过程中将任务添加到队列,在创建后自动启动线程。线程池中的线程可以重复使用,减少频繁创建和销毁线程的开销。

线程池核心参数

  • corePoolSize:线程池核心线程数,即使空闲也会保留的线程数量。
  • maximumPoolSize:线程池最大线程数,允许创建的最大线程数量。
  • keepAliveTime:非核心线程空闲存活时间,超过该时间会被销毁。
  • workQueue:用于保存待执行任务的阻塞队列。
  • threadFactory:用于创建新线程的工厂。
  • handler:拒绝策略,当线程池和队列都满时的处理方式。

线程池创建示例

ThreadPoolExecutor是常用的线程池实现类,以下是创建线程池的代码示例:

import java.util.concurrent.*;

public class ThreadPoolExample {
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService executor = new ThreadPoolExecutor(
            5, // 核心线程数
            10, // 最大线程数
            60L, // 空闲线程存活时间
            TimeUnit.SECONDS, // 时间单位
            new ArrayBlockingQueue<>(100), // 任务队列
            Executors.defaultThreadFactory(), // 线程工厂
            new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
        );

        // 提交任务
        for (int i = 0; i < 20; i++) {
            final int taskId = i;
            executor.execute(() -> {
                System.out.println("执行任务: " + taskId + ", 线程: " + Thread.currentThread().getName());
            });
        }

        // 关闭线程池
        executor.shutdown();
    }
}

Executors工具类

Java提供了Executors工具类快速创建线程池:

  • newFixedThreadPool(int nThreads):固定大小线程池
  • newCachedThreadPool():可缓存线程池
  • newSingleThreadExecutor():单线程线程池
  • newScheduledThreadPool(int corePoolSize):定时任务线程池
// 创建固定大小的线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);

// 创建缓存线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

// 创建单线程线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

线程池拒绝策略

当线程池和队列都满时,会触发拒绝策略:

  • AbortPolicy:默认策略,抛出RejectedExecutionException
  • CallerRunsPolicy:由调用线程处理该任务
  • DiscardOldestPolicy:丢弃队列中最老的任务并重试
  • DiscardPolicy:直接丢弃任务

线程池生命周期管理

  • shutdown():平缓关闭,不再接受新任务,已提交任务继续执行
  • shutdownNow():立即关闭,尝试停止所有正在执行的任务
  • isShutdown():判断线程池是否已关闭
  • isTerminated():判断所有任务是否已完成

线程池最佳实践

避免使用无界队列,可能导致内存溢出 根据任务类型选择合适的线程池 合理设置线程池大小,考虑CPU核心数和任务特性 使用自定义ThreadFactory便于问题排查 正确处理线程池关闭,避免资源泄漏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值