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

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

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

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

线程池的 7 大参数整理。SgU28资讯网——每日最新资讯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。SgU28资讯网——每日最新资讯28at.com

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

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

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

keepAliveTime 空闲线程存活时间

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

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

TimeUnit 时间单位

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

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

BlockingQueue

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

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

ThreadFactory 创建线程的工厂

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

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

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

RejectedExecutionHandler

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top