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


    1 谈谈你对线程池理解

    1 概念
    线程池是一种用于管理线程的机制,核心思想是资源复用,避免频繁地创建和销毁线程所带来的性

    能开销。

    2 原理
    线程池的原理是预先创建一定数量的线程,并将它们放入一个线程池中。当有任务需要执行时,从

    线程池中取出一个空闲线程来执行该任务,如果所有线程都在忙,则任务会被放入队列中等待

    2 自定义线程池参数以及每个参数设置了多少

    JUC的工具类也会提供一些实例化线程池的方法,但是我们项目中并没有使用,因为都会有潜在的OOM风险,所以我们是对这些参数做了定制,具体是这样的

    corePoolSize(核心线程数):

    cpu+1 这个参数要根据具体的服务器配置来定

    maximumPoolSize (救急线程):

    cpu核数*2 这个参数我们考虑到能够对任务处理最大化,设置的都比较大

    keepAliveTime (救急线程过期时间):

    60

    TimeUnit(时间单位):

    一般是s

    ThreadFactory(线程工厂) :

    我们项目采用的默认提供的

    BlockingWorkQueue (阻塞队列) :

    这个参数首光要保证的有界,其次,再根据是否有对执行有效有更高要求的场景

    如果有,采用ArrayBlockingQueue反之采用LinkedBlockingQueue

    RejectedExecutionHandler(拒绝策略):

    我们一般用AbortPolicy拒绝并抛出异常其实就是考虑到一旦日志中检测到了拒绝执行异常的时候,及时动态调整其他参数

    3 线程池执行逻辑

    在这里插入图片描述

    线程池创建,准备好 corePoolSize(核心线程数量)的线程,准备接收任务。

    新的任务进来,用core准备好的空闲线程执行

    若核心线程满了,就将再进来的任务放入阻塞队列中。空闲的core就会自己去阻塞队列获取任务执行。

    阻塞队列满了,就直接开新线程执行,最大只能开到maximumPoolSize最大核心线程数指定的数量

    若最大线程数量满了,就交给拒绝策略去处理。

    4 拒绝策略有几种?

    AbortPolicy (终止策略):,丢弃任务,并抛出异常。(jdk默认策略)

    DiscardPolicy (丢弃策略):丢弃任务,不抛出异常

    DiscardOldestPolicy(弃老策略):丢弃队列最前面的任务,然后重新执行任务

    CallerRunsPolicy (调用方策略): 既不丢弃任务也不抛出异常,而是将某些任务回退到调用者,让调用者去执行它

  • 相关阅读:
    信息学奥赛一本通-编程启蒙3304:练51.1 向量点积计算
    【模拟面试】23届本科生拿下字节/京东/网易研发offer,到底有多强?
    zookeeper源码(02)源码编译启动及idea导入
    艾美捷曲妥珠单抗Trastuzumab化学性质和特异性说明
    Gif图片分解(支持批量)
    适用于物联网的UI设计工具都有哪些?
    离子液体[C2MIm]SbF6/cas:305370-81-4/1-乙基-3-甲基咪唑六氟锑酸盐的密度值
    想要精通算法和SQL的成长之路 - 连续的子数组和
    卷积神经网络——vgg16网络及其python实现
    统信UOS通过源码安装软件提示“configure: error: cannot run C compiled programs.”错误
  • 原文地址:https://blog.csdn.net/qq_45643467/article/details/133697365
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号