当前位置:网站首页 > Java基础 > 正文

java并发基础教程



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 异常,默认策略。
:由调用线程直接执行任务。
:丢弃任务,不抛出异常。
:丢弃队列中等待最久的任务,然后执行当前任务。

五、最大线程数如何设置

  • 上一篇: java注解开发基础
  • 下一篇: java基础重要么
  • 版权声明


    相关文章:

  • java注解开发基础2024-10-18 19:34:00
  • Java基础面试题软件2024-10-18 19:34:00
  • java程序设置基础第5版2024-10-18 19:34:00
  • java基础第七章异常2024-10-18 19:34:00
  • java基础编程100例pdf2024-10-18 19:34:00
  • java基础重要么2024-10-18 19:34:00
  • java基础叫什么2024-10-18 19:34:00
  • java基础之多态的详细解释2024-10-18 19:34:00
  • java 0基础入门2024-10-18 19:34:00
  • java基础的小程序2024-10-18 19:34:00