主页 > 电脑硬件  > 

【Java】多线程篇——线程池

【Java】多线程篇——线程池

目录 线程池 线程池的核心类 `ThreadPoolExecutor` 的构造方法 线程池的常用方法 提交任务 关闭线程池 监控线程池状态 通过 `Executors` 快速创建线程池 线程池的完整示例 常见问题与解决方案 总结

线程池 线程池的核心类

Java 线程池的实现基于 java.util.concurrent 包,核心类和接口如下:

类/接口 说明 Executor 最基础的线程池接口,仅定义 execute(Runnable) 方法。 ExecutorService 扩展了 Executor,提供更丰富的线程池管理功能(如任务提交、关闭)。 ThreadPoolExecutor 线程池的核心实现类,所有功能均通过此类实现。 ScheduledExecutorService 支持定时任务和周期性任务的线程池接口。 Executors 工厂类,提供快捷创建线程池的静态方法(如 newFixedThreadPool)。 ThreadPoolExecutor 的构造方法

ThreadPoolExecutor 的构造函数包含7个参数,以下是详细说明:

public ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 临时线程的空闲存活时间 TimeUnit unit, // 时间单位(秒、毫秒等) BlockingQueue<Runnable> workQueue, // 任务队列 ThreadFactory threadFactory, // 线程工厂(自定义线程创建) RejectedExecutionHandler handler // 拒绝策略 )

参数详解

corePoolSize 作用:线程池中始终保持存活的线程数量(即使空闲也不会被回收)。 示例:若设置为3,线程池最少有3个线程处理任务。 maximumPoolSize 作用:线程池允许创建的最大线程数(包括核心线程和临时线程)。 示例:若设置为10,当任务队列满时,最多创建10个线程。 keepAliveTime + unit 作用:临时线程(超出核心线程数的线程)的空闲存活时间。超过该时间且无任务执行时,临时线程会被回收。 示例:60, TimeUnit.SECONDS 表示临时线程空闲60秒后终止。 workQueue 作用:存储待执行任务的队列。 常用实现类: ArrayBlockingQueue:有界队列(需指定容量)。 LinkedBlockingQueue:无界队列(默认容量为 Integer.MAX_VALUE)。 SynchronousQueue:直接传递任务的队列(无存储能力)。 threadFactory 作用:自定义线程的创建方式(如设置线程名称、优先级)。 默认实现:Executors.defaultThreadFactory()。 handler 作用:当任务队列已满且线程数达到最大值时的拒绝策略。 内置策略: AbortPolicy(默认):抛出 RejectedExecutionException 异常。 CallerRunsPolicy:由提交任务的线程直接执行任务。 DiscardPolicy:静默丢弃新任务。 DiscardOldestPolicy:丢弃队列中最旧的任务,然后重新提交新任务。 线程池的常用方法 提交任务 方法 说明 void execute(Runnable task) 提交一个无需返回值的任务(适合异步执行)。 Future<T> submit(Callable<T> task) 提交一个有返回值的任务,通过 Future 获取结果或异常。 Future<?> submit(Runnable task) 提交 Runnable 任务,返回的 Future 可用于判断任务是否完成。

示例:

ExecutorService executor = Executors.newFixedThreadPool(3); // 使用 execute 提交任务(无返回值) executor.execute(() ->
标签:

【Java】多线程篇——线程池由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Java】多线程篇——线程池