千家信息网

Executor的原理是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍Executor的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、Executor 线程池体系介绍1. Executor 框架体系介绍Executo
千家信息网最后更新 2026年11月03日Executor的原理是什么

这篇文章给大家介绍Executor的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一、Executor 线程池体系介绍

1. Executor 框架体系介绍

  • Executor: java线程池框架的最上层父接口,在Executor中只有executor()方法,该方法表示提交Runnable类型线程池并执行。

  • ExecutorService: Executor的子接口,该接口中submit()方法可接收Runnable参数或Callable参数,在使用结束后使用shutdown()方法关闭线程池,不再接收新的任务。

  • AbstractExecutorService: ExecutorService的默认实现类。

  • ScheduledExecutorService: ExecutorService的子接口,可供定时任务调度的接口。

  • ScheduledThreadPoolExecutor: 提供了另一种线程池,延迟执行和周期性执行的线程池。

  • ThreadPoolExecutor: Java线程池最核心的一个类,该类继承自AbstractExecutorService主要功能是创建线程池,给任务分配线程资源,执行任务。

2. ThreadPoolExecutor 源码解析

ThreadPoolExecutor有多个重载的构造方法,我们基于最完整的构造方法来分析每个参数的作用。

public ThreadPoolExecutor(int corePoolSize,           //核心线程池数量                              int maximumPoolSize,   //最大线程池数量                              long keepAliveTime,    //线程数大于核心线程池数,空闲线程的最大存活时间                              TimeUnit unit,         //参数的时间单位                              BlockingQueue workQueue,       //线程等待队列                              ThreadFactory threadFactory,           //用于设置创建线程的工厂                              RejectedExecutionHandler handler) {       //设置拒绝策略        if (corePoolSize < 0 ||            maximumPoolSize <= 0 ||            maximumPoolSize < corePoolSize ||            keepAliveTime < 0)            throw new IllegalArgumentException();        if (workQueue == null || threadFactory == null || handler == null)            throw new NullPointerException();        this.acc = System.getSecurityManager() == null ?                null :                AccessController.getContext();        this.corePoolSize = corePoolSize;        this.maximumPoolSize = maximumPoolSize;        this.workQueue = workQueue;        this.keepAliveTime = unit.toNanos(keepAliveTime);        this.threadFactory = threadFactory;        this.handler = handler;    }

二、Executors 线程池工具类

1. newFixedThreadPool: 固定大小线程池

public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {        return new ThreadPoolExecutor(nThreads, nThreads,                                      0L, TimeUnit.MILLISECONDS,                                      new LinkedBlockingQueue(),                                      threadFactory);    }
  • corePoolSize与maximumPoolSize相等,即其线程全为核心线程,是一个固定大小的线程池,是其优势;

  • keepAliveTime = 0 该参数默认对核心线程无效,而FixedThreadPool全部为核心线程;

  • workQueue 为LinkedBlockingQueue(无界阻塞队列),队列最大值为Integer.MAX_VALUE。如果任务提交速度持续大余任务处理速度,会造成队列大量阻塞。因为队列很大,很有可能在拒绝策略前,内存溢出。是其劣势;

  • FixedThreadPool的任务执行是无序的;

2. newSingleThreadExecutor: 单线程化线程池

public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {        return new FinalizableDelegatedExecutorService            (new ThreadPoolExecutor(1, 1,                                    0L, TimeUnit.MILLISECONDS,                                    new LinkedBlockingQueue(),                                    threadFactory));    }
  • 控制线程池中corePoolSize与maximumPoolSize都为1

  • FinalizableDelegatedExecutorService继承DelegatedExecutorService,DelegatedExecutorService最终继承AbstractExecutorService,该类是线程池的一个代理模式的实现,相比于ThreadPoolExecutor阉割一部分功能,形成线程池单例化。

3. newCachedThreadPool: 可缓存线程池

public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,                                      60L, TimeUnit.SECONDS,                                      new SynchronousQueue(),                                      threadFactory);    }
  • corePoolSize = 0,maximumPoolSize = Integer.MAX_VALUE,即线程数量几乎无限制

  • keepAliveTime = 60s,60s后空闲线程自动结束

  • SynchronousQueue 为同步队列,入队出队必须同时传递,因为CachedThreadPool线程创建无限制,不会有队列等待

4. newScheduledThreadPool: 周期性线程池

public static ScheduledExecutorService newScheduledThreadPool(            int corePoolSize, ThreadFactory threadFactory) {        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);    }
  • newScheduledThreadPool为定长线程池,限定核心线程数

  • ScheduledThreadPoolExecutor方法中对线程池参数做了进一步的封装,设置maximumPoolSize = Integer.MAX_VALUE,keepAliveTime = 0

  • 调用scheduleAtFixedRate()方法可进行周期性任务设置

5. newWorkStealingPool: 工作窃取线程池(jdk1.8)

public static ExecutorService newWorkStealingPool(int parallelism) {        return new ForkJoinPool            (parallelism,             ForkJoinPool.defaultForkJoinWorkerThreadFactory,             null, true);    }
  • ForkJoinPool继承AbstractExecutorService,ForkJoinPool可以充分利用多核cpu的优势,将一个任务拆分成多个"小任务"并行计算,提高任务的执行时间

关于Executor的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

线程 任务 方法 核心 队列 参数 接口 最大 周期 周期性 数量 时间 原理 优势 体系 内容 功能 多个 大小 无限制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 深圳市人人互联网科技有限公司 互联网科技公司简介 智能科技公司是互联网公司吗 善班互联网科技 奇酷互联网络科技公司 亿账通互联网科技 广州紫鲸互联网科技 互联网科技论坛 撒么互联网科技公司 人人互联网科技是培训 互联网 科技服务平台 成都仁贤领冠互联网科技有限公司 互联网企业和科技型企业 浙江互联网科技研学营 开一家科技互联网公司需要多少钱 翼展科技 首家互联网医院 21世纪互联网科技成就 互联网科技品牌 银川新华互联网科技学校招聘 科技服务与互联网 互联网科技公司发展 广州善班互联网科技 互联网之后的科技是什么 承德科技产业互联网发展 银川新华互联网科技职业技术培训学校图片 深圳无忧互联网科技 数字互联网科技有限公司 互联网领先科技成果宣传视频 平安好医生打造互联网科技医疗
0