当前位置:首页 > 科技  > 软件

程序员必会之最详细的ThreadPoolExecutor 线程池七大参数含义

来源: 责编: 时间:2023-10-13 14:36:37 403观看
导读线程池的 7 大参数整理。public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHa

XxX28资讯网——每日最新资讯28at.com

线程池的 7 大参数整理。XxX28资讯网——每日最新资讯28at.com

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)

corePoolSize 线程池中长期存活的线程数

ThreadPoolExecutor 在创建之初,是不会立即初始化corePoolSize数量的Thread的,而是通过外部request来一个一个的创建,当达到corePoolSize数目之后,就会维持至少corePoolSize数目的Thread在pool中,哪怕他们都处于空闲状态(idle)。corePoolSize >= 0。XxX28资讯网——每日最新资讯28at.com

maximumPoolSize 线程池中的最大线程数量

maximumPoolSize >= corePoolSize,maximumPoolSize>0XxX28资讯网——每日最新资讯28at.com

  • 若当前线程池中线程数 < corePoolSize,则每来一个任务就创建一个线程去执行。
  • 若当前线程池中线程数 >= corePoolSize,会尝试将任务添加到任务队列。如果添加成功,则任务会等待空闲线程将其取出并执行(针对的是有界队列)。
  • 若队列已满,且当前线程池中线程数 < maximumPoolSize,创建新的线程。
  • 若当前线程池中线程数 >= maximumPoolSize,则会采用拒绝策略。

keepAliveTime 空闲线程存活时间

当线程池线程数量超过corePoolSize时,多余的空闲线程会在多长时间内被销毁。XxX28资讯网——每日最新资讯28at.com

销毁的线程数=maximumPoolSize(最大线程数)-corePoolSize(核心线程数)。XxX28资讯网——每日最新资讯28at.com

TimeUnit 时间单位

空闲线程存活时间的描述单位,有以下选项:XxX28资讯网——每日最新资讯28at.com

  • TimeUnit.DAYS:天
  • TimeUnit.HOURS:小时
  • TimeUnit.MINUTES:分
  • TimeUnit.SECONDS:秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.MICROSECONDS:微妙
  • TimeUnit.NANOSECONDS:纳秒

BlockingQueue

提交但未执行的任务队列,有以下选项:XxX28资讯网——每日最新资讯28at.com

  • LinkedBlockingQueue:用链表实现的队列,可以是有界的,也可以是无界的,但在Executors中默认使用无界的。当有新的任务来到时,若系统的线程数小于corePoolSize,线程池会创建新的线程执行任务, 当系统的线程数量等于corePoolSize后,因为是无界的任务队列,总是能成功将任务添加到任务队列中,所以线程数量不再增加。若任务创建的速度远大于任务处理的速度,无界队列会快速增长,直到内存耗尽。
  • SynchronousQueue:一个不存储元素的阻塞队列,SynchronousQueue没有容量,所以实际上提交的任务不会被添加到任务队列,总是将新任务提交给线程执行,如果没有空闲的线程,则尝试创建新的线程,如果线程数量已经达到最大值(maximumPoolSize),则执行拒绝策略。
  • ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
  • PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法。
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

ThreadFactory 创建线程的工厂

线程池创建线程时调用的工厂方法,通过此方法可以设置线程的优先级、线程命名规则以及线程类型(用户线程还是守护线程)等。一般情况下使用默认的,即Executors类的静态方法defaultThreadFactory(),也可以自定义。XxX28资讯网——每日最新资讯28at.com

import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Test {    public static void main(String[] args) {        // 创建线程工厂        ThreadFactory threadFactory = new ThreadFactory() {            @Override            public Thread newThread(Runnable runnable) {                // 创建线程池中的线程                Thread thread = new Thread(runnable);                // 设置线程名称                thread.setName("Thread-" + runnable.hashCode());                // 设置线程优先级(最大值:10)                thread.setPriority(Thread.MAX_PRIORITY);                //......                return thread;            }        };        // 创建线程池        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(                5,                10,                0L,                TimeUnit.MILLISECONDS,                new LinkedBlockingQueue<Runnable>(10),                threadFactory        );        try{            threadPoolExecutor.submit(new Runnable() {                @Override                public void run() {                    Thread thread = Thread.currentThread();                    System.out.println(String.format("线程:%s,线程优先级:%d",thread.getName(), thread.getPriority()));                }            });        }catch (Exception e) {        } finally {            threadPoolExecutor.shutdown();        }    }}

XxX28资讯网——每日最新资讯28at.com

Executors.defaultThreadFactory()XxX28资讯网——每日最新资讯28at.com

RejectedExecutionHandler

拒绝策略。当线程池的任务超出线程池队列可以存储的最大值之后,执行的策略。XxX28资讯网——每日最新资讯28at.com

  • AbortPolicy策略:直接抛出异常,阻止系统正常工作。(线程池的默认策略)。
  • DiscardOldestPolicy策略:丢弃任务队列中最早添加的任务,并尝试提交当前任务。
  • CallerRunsPolicy策略:调用主线程执行被拒绝的任务,这提供了一种简单的反馈控制机制,将降低新任务的提交速度。
  • DiscardPolicy策略:忽略并抛弃当前任务。

XxX28资讯网——每日最新资讯28at.com

new一个线程池XxX28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13521-0.html程序员必会之最详细的ThreadPoolExecutor 线程池七大参数含义

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Spring事务超时到底是怎么回事?

下一篇: C# Dev Kit for Visual Studio Code 用法详解

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 小米MIX Fold 3配置细节曝光:搭载领先版骁龙8 Gen2+罕见5倍长焦

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
Top