一、前言

  JUC这部分还有线程池这一块没有分析,需要抓紧时间分析,下面开始ThreadPoolExecutor,其是线程池的基础,分析完了这个类会简化之后的分析,线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。下面开始分析。

二、ThreadPoolExecutor数据结构

   在ThreadPoolExecutor的内部,主要由BlockingQueue和AbstractQueuedSynchronizer对其提供支持,BlockingQueue接口有多种数据结构的实现,如LinkedBlockingQueueArrayBlockingQueue等,而AbstractQueuedSynchronizer在之前有过详细的分析,有兴趣的读者可以参考。

三、ThreadPoolExecutor源码分析

  3.1 类的继承关系

public class ThreadPoolExecutor extends AbstractExecutorService {}

  说明:ThreadPoolExecutor继承自AbstractExecutorService,AbstractExecuetorService提供了ExecutorService执行方法的默认实现。

  3.2 类的内部类

  ThreadPoolExecutor的核心内部类为Worker,其对资源进行了复用,减少创建线程的开销,还有若干个策略类。内部类的类图如下

【JUC】JDK1.8源码分析之ThreadPoolExecutor(一)

  说明:可以看到Worker继承了AQS抽象类并且实现了Runnable接口,其是ThreadPoolExecutor的核心内部类。而对于AbortPolicy,用于被拒绝任务的处理程序,它将抛出 RejectedExecutionException、CallerRunsPolicy,用于被拒绝任务的处理程序,它直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务、DiscardPolicy,用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务、DiscardOldestPolicy,用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试 execute;如果执行程序已关闭,则会丢弃该任务。这些都是拒绝任务提交时的所采用的不同策略。

  ① Worker类

  1. 类的继承关系  

private final class Worker 
    extends AbstractQueuedSynchronizer 
    implements Runnable {}

   说明:Worker继承了AQS抽象类,其重写了AQS的一些方法,并且其也可作为一个Runnable对象,从而可以创建线程Thread。

  2. 类的属性

    private final class Worker
        extends AbstractQueuedSynchronizer
        implements Runnable
    {
        /**
         * This class will never be serialized, but we provide a
         * serialVersionUID to suppress a javac warning.
         */
        // 版本号
        private static final long serialVersionUID = 6138294804551838833L;

        /** Thread this worker is running in.  Null if factory fails. */
        // worker 所对应的线程
        final Thread thread;
        /** Initial task to run.  Possibly null. */
        // worker所对应的第一个任务
        Runnable firstTask;
        /** Per-thread task counter */
        // 已完成任务数量
        volatile long completedTasks;
    }
View Code

相关文章:

  • 2022-12-23
  • 2021-05-13
  • 2021-09-20
  • 2021-08-06
  • 2021-10-31
  • 2021-08-07
  • 2021-09-19
  • 2021-09-27
猜你喜欢
  • 2022-01-18
  • 2022-01-16
  • 2022-02-20
  • 2021-06-23
  • 2021-11-27
  • 2022-12-23
相关资源
相似解决方案