当前位置: 首页 > wzjs >正文

永嘉县建设局网站电商运营公司

永嘉县建设局网站,电商运营公司,山东企业站点seo,html5网站提示文章目录 线程池定义组成工作参数设置种类关闭 线程池 定义 线程池就是提前创建好一批线程,反复复用处理任务,避免频繁创建销毁线程,同时控制线程数量,让系统更高效、稳定。 举个例子: 场景假设: 你开了…

文章目录

        • 线程池
          • 定义
          • 组成
          • 工作
          • 参数设置
          • 种类
          • 关闭

线程池
定义

线程池就是提前创建好一批线程,反复复用处理任务,避免频繁创建销毁线程,同时控制线程数量,让系统更高效、稳定。

举个例子:

场景假设
你开了一家餐馆,每天有很多客人来吃饭。每个客人的订单(任务)需要服务员(线程)来处理,比如点餐、上菜、结账等。

  • 普通多线程模式(无线程池)
    来一个客人,就临时招一个服务员(新建线程),服务员处理完这个客人后就直接解雇(销毁线程)。
    问题
    • 招人和解雇太频繁,浪费时间(线程创建 / 销毁开销大)。
    • 忙的时候可能招太多服务员(线程数量失控),挤满餐厅(占用过多系统资源),甚至累到没人可用(资源耗尽)。
    • 闲的时候服务员都走了,来新客人又得重新招人(响应慢)。
  • 线程池模式
    你提前雇一批服务员(创建固定数量的线程),组成一个 “服务员池”。
    • 有客人来,直接从池子里找空闲服务员处理订单(复用线程)。
    • 服务员处理完一个订单后,不离开,留在池子里等下一个订单(线程复用)。
    • 如果客人太多,服务员都在忙,就把订单先记在本子上排队(任务队列),等有服务员空闲了再处理。
    • 如果订单实在太多,超过池子容量,就按规则拒绝(比如 “今日客满,下次再来”)。
组成

Java 线程池基于 java.util.concurrent.ExecutorService 接口实现,其核心实现类是 ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,          // 核心线程数int maximumPoolSize,       // 最大线程数long keepAliveTime,        // 非核心线程空闲存活时间TimeUnit unit,             // 存活时间单位BlockingQueue<Runnable> workQueue, // 任务队列ThreadFactory threadFactory,       // 线程工厂(可选)RejectedExecutionHandler handler   // 拒绝策略(可选)
)
参数名作用
corePoolSize核心线程数,即使空闲也不会被回收(除非 allowCoreThreadTimeOut=true)。
maximumPoolSize线程池允许的最大线程数。
keepAliveTime非核心线程的空闲存活时间(超时后回收)。
unitkeepAliveTime 的时间单位(如 TimeUnit.SECONDS)。
workQueue任务队列,用于保存等待执行的任务(如 LinkedBlockingQueue)。
threadFactory创建新线程的工厂(可自定义线程名、优先级等)。
handler拒绝策略,当任务数超过线程池处理能力时的处理方式。

拒绝策略handler有哪些

1.抛出异常

2.不做任何处理,静默丢弃

3.抛弃最老的任务,执行新任务

4.让提交任务的线程(调用者线程)自己去执行被拒绝的任务。

5.实现接口,自定义拒绝策略

工作
  1. 任务提交:调用 execute(Runnable task)submit(Callable task)
  2. 核心线程处理
    • 如果当前线程数 <核心线程数 corePoolSize,立即创建新线程执行任务。
  3. 任务入队
    • 如果核心线程已满,任务被放入任务队列 workQueue 等待。
  4. 非核心线程处理
    • 如果队列已满且线程数 < maximumPoolSize,创建非核心线程执行任务。
  5. 拒绝策略
    • 如果队列满且线程数已达最大值,触发拒绝策略。

在这里插入图片描述

举个例子:

银行有3个柜台(核心线程),2个临时柜台(最大线程数:5),一个等候区有2个座位(任务队列,容量:2)。

客户1,2,3到达银行,直接在核心柜台办理业务;

客户4,5到达,进入等候区;

客户6,7到达,等候区已满,银行开启临时柜台,直接处理客户6,7;

客户8到达,核心和临时柜台和等候区已满,拒绝用户。

当临时柜台空闲超过keepAliveTime,银行关闭他们,保留核心柜台。

参数设置
  • 核心线程数设置

    • CPU密集型:corePoolSize = CPU核数 + 1

      任务主要消耗 CPU 资源,避免过多线程竞争CPU

    • IO密集型:corePoolSize = CPU核数 x 2

      任务涉及网络、磁盘等 IO 操作,或更高,具体看IO等待时间

核心线程数可以设置为0吗?

可以,当核心线程数为0的时候,会创建一个非核心线程进行执行。

种类
  1. FixedThreadPool(固定人数餐馆)

    核心线程数和最大线程数一样。超出线程处理能力的任务放到任务队列中进行等待。

    • 提前设置好固定数量的线程(比如 5 个服务员),永远保持这个数量,不会多也不会少。
    • 适用场景:任务量稳定,需要控制并发数,比如银行系统处理固定数量的交易请求。
  2. CachedThreadPool(弹性扩招餐馆)

    线程数是几乎可以无限增加的

    • 线程数量不固定,任务多的时候可以快速创建线程(服务员不够就临时扩招),任务少的时候线程会自动销毁(空闲服务员下班)。
    • 适用场景:任务短平快且数量不确定,比如电商网站处理突发的用户请求。
  3. ScheduledThreadPool(预约制餐馆)

    • 专门处理定时任务或周期性任务(比如每天早上 9 点打扫卫生,每隔 1 小时统计数据)。
    • 类比:服务员按预约时间处理特定任务,比如 “10 点整给 3 号桌上甜点”。
  4. SingleThreadExecutor(单人餐馆)

    使用唯一的线程去执行任务。如果线程在执行任务的过程中发生异常,线程池也会重新创建一个线程来执行后续的任务。

    • 只有一个线程(一个服务员),所有任务按顺序执行,保证不会有并发问题(比如任务必须按顺序处理,不能乱)。
    • 类比:小而精的餐馆,只有一个主厨,必须按订单顺序做菜,避免混乱。
关闭

主要是两个方法:shutdown()和shutdownNow()

核心区别在于关闭线程池的「温和程度」和「对任务的处理方式」

  • shutdown():不再接受新订单,但会处理完正在执行和队列中的任务

  • shutdownNow():不再接受新订单,并尝试立即中断执行中任务,退回队列中的任务。

    为什么是尝试?

    终止线程的方法是通过调用 Thread.interrupt() 方法来实现的,但是这种方法的作用有限,如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt()方法是无法中断当前的线程的。它可能必须要等待所有正在执行的任务都执行完成了才能退出。

在这里插入图片描述
不断学习中,如有错误,大家指出>W<


文章转载自:

http://thTByymN.LyLkh.cn
http://65MaFomN.LyLkh.cn
http://9DCfdG5w.LyLkh.cn
http://TzyVWlJF.LyLkh.cn
http://jNoShrmz.LyLkh.cn
http://aWhQiloY.LyLkh.cn
http://pLfpDjQl.LyLkh.cn
http://viFROzy8.LyLkh.cn
http://Ren4Coy1.LyLkh.cn
http://7MlHT10z.LyLkh.cn
http://zupgLFVH.LyLkh.cn
http://3Tn4nCRZ.LyLkh.cn
http://aFueB022.LyLkh.cn
http://wO41DkVw.LyLkh.cn
http://ix2qdP0C.LyLkh.cn
http://uZtTGyV0.LyLkh.cn
http://5mg1pXoh.LyLkh.cn
http://fvnIGQnt.LyLkh.cn
http://aBNCp2bW.LyLkh.cn
http://0uQM1L5o.LyLkh.cn
http://wf1g8Dkm.LyLkh.cn
http://tYpdy2DO.LyLkh.cn
http://1lc1Mwiw.LyLkh.cn
http://bD4Cd0e4.LyLkh.cn
http://VuCu6eL6.LyLkh.cn
http://PcaZ42JB.LyLkh.cn
http://dYPD8io7.LyLkh.cn
http://MXKhRvjc.LyLkh.cn
http://F0rlMXFr.LyLkh.cn
http://nYX88OKr.LyLkh.cn
http://www.dtcms.com/wzjs/666467.html

相关文章:

  • 站长工具seo排名网站标题关键词描述
  • 闲鱼网站如何赚钱找合作项目app平台
  • 广东东莞新闻最新消息徐州英文网站seo
  • 没有域名如何访问网站成都微信网站制作
  • aspnet网站开发案例wordpress可选模式主题
  • 制作一个企业网站多少钱企业服务公司经营范围是什么
  • 安康市建设局网站商务平台网站
  • 四川网站设计首选柚米科技怎么注册阿里巴巴店铺
  • 滴滴优惠券网站怎么做如何做网站公证
  • 广东省住房和城乡建设网站推广公司品牌
  • 网站建设综合训练打开直播
  • 提供提供手机网站建设用vps安装Wordpress
  • 网站营销方案设计公司wordpress 管理员密码忘记
  • 做机械设计的网站app网站建设哪家好
  • 电商网站分析wordpress 迁站
  • 东莞品牌网站建设报价怎么做电脑网站后台
  • 凡科网的网站建设怎么做网店设计与装修实训报告
  • 公司网站域名无法解析阿里巴巴外发加工网珠海
  • 科技网站颜色服务器网络
  • jsp做的网站源码网站是公司域名是个人可以吗
  • 网站百度搜索情况和反链接优化建议资源搜索引擎搜索神器网
  • 智慧团建官方网站登录入口网站可以做固定资产吗
  • 做包装找灵感看什么网站xampp wordpress 花生壳
  • 免费名片在线设计网站乌克兰设计网站建设
  • 夏邑县城乡建设规划局网站wordpress教程教程
  • 收费网站方案网上购物app有哪些
  • 网上做任务网站个人社保缴费应交多少
  • 内部网站做域名解析到端口百万网址导航
  • 网站建设江阴重庆工程建设造价信息网站
  • wordpress企业站主题wordpress 媒体库 API