JUC并发编程_线程池
-
- 一、线程池的介绍
- 二、线程池的创建方式
-
- 1、通过 Executors 工厂类创建
- 2、通过ThreadPoolExecutor构造函数创建
- 三、线程池的工作流程
- 四、线程池的四种拒绝策略
- 五、最大线程数如何java并发基础教程设置
- 六、注意事项
一、线程池的介绍
线程池的组成:
Java中的线程池主要由 java.util.concurrent 包下的Executor、ExecutorService、ThreadPoolExecutor等接口和类提供支持。其中,ThreadPoolExecutor是线程池的核心实现类。
:线程池的顶级接口,定义了execute(Runnable command)方法,用于提交任务。
:Executor的子接口,增加了管理线程池生命周期和任务执行的方法,如submit(Callable/Void)、shutdown()、shutdownNow()等。
:ExecutorService 的默认实现,提供了丰富的配置选项,如核心线程数、最大线程数、工作队列类型、线程存活时间等。
线程池的好处:
1、降低资源消耗(线程复用)
2、提高响应速度
3、方便管理(控制最大并发数)
二、线程池的创建方式
1、通过 Executors 工厂类创建
不推荐使用 Executors 创建线程池,它们的阻塞队列长度都是 ,可能会堆积大量请求,从而导致 OOM
:创建一个固定大小的线程池,适用于控制最大并发数的场景
:创建一个单线程的线程池,保证所有任务按照指定顺序执行。
:创建一个可缓存的线程池,适用于执行大量短期异步任务的场景。
:创建一个定时线程池,用于定时及周期性任务执行。
2、通过ThreadPoolExecutor构造函数创建
使用 的构造函数可以更加灵活地配置线程池,如指定核心线程数、最大线程数、线程存活时间、工作队列等参数。
三、线程池的工作流程
当有新任务提交时,线程池会检查是否有空闲的线程。
如果有空闲线程,则直接将任务分配给该线程执行。
如果没有空闲线程,则检查当前线程数是否达到了核心线程数。
如果未达到核心线程数,则创建新的线程来执行任务。
如果已达到核心线程数,则将任务加入到任务队列中等待执行。
如果任务队列已满,且当前线程数小于最大线程数,则创建新的线程来处理任务。
如果当前线程数等于最大线程数,且任务队列已满,则根据拒绝策略处理无法执行的任务。
四、线程池的四种拒绝策略
当任务队列已满,且无法创建新的线程来执行任务时,线程池会根据配置的拒绝策略来处理这些任务。常见的拒绝策略包括:
:抛出 RejectedExecutionException 异常,默认策略。
:由调用线程直接执行任务。
:丢弃任务,不抛出异常。
:丢弃队列中等待最久的任务,然后执行当前任务。
五、最大线程数如何设置
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/25853.html