码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JUC包-线程池


    文章目录

    • 1. 线程池相关类图
    • 2. 相关类讲解
    • 3. Executors
    • 4. 线程池的构造
      • 4.1. 线程池的基本参数

    1. 线程池相关类图

    在这里插入图片描述

    2. 相关类讲解

    1. Executor:基础的接口,初衷是讲任务提交和任务执行细节进行解耦,有一个唯一的方法:
    void execute(Runnable command);
    
    • 1
    1. ExecutorService:提供了service的管理功能,如shutdown等方法;也提供了更加全面的任务提交机制,返回的不是void,而是Future的submit方法。
    <T> Future<T> submit(Callable<T> task);
    <T> Future<T> submit(Runnable task, T result);
    Future<?> submit(Runnable task);
    
    • 1
    • 2
    • 3
    1. ThreadPoolExecutor、ScheduledThreadPoolExecutor、ForkJoinPool:Java标准类库提供的基础实现。其中ScheduledThreadPoolExecutor是ThreadPoolExecutor的扩展,主要是增加了调度逻辑。ForkJoinPool则是为ForkJoinTask定制的线程池。

    3. Executors

    从简化使用的角度,提供了创建线程池的各种方便的静态工厂方法。主要提供的方法有:

    • newCachedThreadPool()
    • newFixedThreadPool(int nThreads)
    • newSingleThreadExecutor()
    • newScheduledThreadPool(int corePoolSize)
    • newWorkStealingPool(int parallelism)

    开发者都是利用 Executors 提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的 ExecutorService 类型或者不同的初始参数。

    但是,我们仍然可以直接使用ThreadPoolExecutor等构造方法来创建线程池,这就需要我们了解线程池的构造。

    4. 线程池的构造

    在这里插入图片描述

    4.1. 线程池的基本参数

    • int corePoolSize:线程池保有的最小线程数。有些项目很闲,但是不能把人都撤了,至少要留corePoolSize个人坚守阵地【100】
    • int maximumPoolSize:表示线程池创建的最大线程数。当项目很忙的时候,就要增加人,但是也不能无限添加,最多只能加到maxmunPoolSize个人;当项目不忙的时候,就要撤人,最多能撤到corePoolSize个人【500】
    • long keepAliveTime & TimeUnit unit:一个线程如果在一段时间都没有执行任务,说明很闲。这个keepAliveTime和unit就是用来定义“一段时间”的参数。也就是说,如果一个线程空闲了keepAliveTime & unit这么久,而且线程池中线程数大于corePoolSize,那么这个空闲的线程就要被回收了。【10 s】
    • BlockingQueue workQueue:工作队列。负责存储用户提交的各个任务。 【100】
    • ThreadFactory threadFactory:通过这个参数可以自定义如何创建线程。
    • RejectedExecutionHandler handler:自定义拒绝策略。如果线程池中的所有的线程都在忙,并且工作队列也满了,那么此时提交任务,线程池就会拒绝接收。【CallerRunsPolicy】
  • 相关阅读:
    源代码层面分析Appium-inspector工作原理
    2023最新版JavaSE教程——第7天:面向对象编程(进阶)
    Vue3项目创建+组合式API使用+组件通信+渲染微博热搜+打包上线
    亚信科技亮相南京软博会,数智赋能百行千业
    校招秋招,性格和职业有关系吗?
    用Python舞动数据的魔力:探索数据分析的艺术之路
    风起乌兰察布,中国自动驾驶迎来170倍提速
    MySQL模块---查询和插入数据
    C# Socket通信从入门到精通(10)——如何检测两台电脑之间的网络是否通畅
    Tortoise 没有显示绿色图标
  • 原文地址:https://blog.csdn.net/hdn_kb/article/details/125993304
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号