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

网络营销导向型企业网站建设的原则网页设计网站怎么做

网络营销导向型企业网站建设的原则,网页设计网站怎么做,广告网络联盟,软文广告文案什么是线程池? 线程池是用来管理和复用线程的⼯具,它可以减少线程的创建和销毁开销。 在 Java 中,ThreadPoolExecutor 是线程池的核⼼实现,它通过核⼼线程数、最⼤线程数、任务队列和拒绝策略来 控制线程的创建和执⾏。 举个栗…

什么是线程池?

线程池是用来管理和复用线程的⼯具,它可以减少线程的创建和销毁开销。

在 Java 中,ThreadPoolExecutor 是线程池的核⼼实现,它通过核⼼线程数、最⼤线程数、任务队列和拒绝策略来 控制线程的创建和执⾏。

举个栗子:就像你开了⼀家餐厅,线程池就相当于固定数量的服务员,顾客(任务)来了就安排空闲的服务员(线 程)处理,避免了频繁招⼈和解雇的成本。

线程池的工作流程

可以简单的总结为:

任务提交 → 核⼼线程执⾏ → 任务队列缓存 → 非核心线程执⾏ → 拒绝策略处理。

第⼀步,线程池通过 submit() 提交任务。

ExecutorService threadPool = Executors.newFixedThreadPool(5);threadPool.submit(() -> {System.out.println(Thread.currentThread().getName() + "\t" + "办理业务");})

第⼆步,线程池会先创建核⼼线程来执⾏任务。

if (workerCountOf(c) < corePoolSize) {if (addWorker(command, true)) {return;}}

第三步,如果核⼼线程都在忙,任务会被放⼊任务队列中。

workQueue.offer(task)

第四步,如果任务队列已满,且当前线程数量⼩于最⼤线程数,线程池会创建新的线程来处理任务。

if (!addWorker(command, false))

第五步,如果线程池中的线程数量已经达到最⼤线程数,且任务队列已满,线程池会执⾏拒绝策略。

handler.rejectedExecution(command, this)

另外一种回答:

第一步,创建线程池;

第二步,调用线程池的execute方法,准备执行任务;

如果正在运行的线程数量小于corePoolSize,那么线程池会创建一个新的线程(核心线程)来执行这个任务;

如果正在运行的线程数量大于等于corePoolSize,那么线程池会将这个任务放入等待队列;

如果等待队列满了 ,并且正在运行的线程数量小于maximumpoolsize,那么线程池会创建一个新的线程(普通线程)来执行这个任务;

如果等待队列满了,并且正在运行的线程数量大于或等于maximumpoolsize,那么线程池会执行拒绝策略。

第三步,线程执⾏完毕后,线程并不会⽴即销毁,⽽是继续保持在池中等待下⼀个任务。

第四步,当线程空闲时间超出指定时间,且当前线程数量⼤于核⼼线程数时,线程会被回收。

线程池的主要参数有哪些?

线程池有 7 个参数,需要重点关注的有核⼼线程数、最⼤线程数、等待队列、拒绝策略。

①、corePoolSize:核⼼线程数,长期存活,执⾏任务的主力。

②、maximumPoolSize:线程池允许的最⼤线程数。

③、workQueue:任务队列,存储等待执⾏的任务。

④、handler:拒绝策略,任务超载时的处理⽅式。也就是线程数达到 maximumPoolSiz,任务队列也满了的时 候,就会触发拒绝策略。

⑤、threadFactory:线程⼯⼚,用于创建线程,可自定义线程名。

⑥、keepAliveTime:非核⼼线程的存活时间,空闲时间超过该值就销毁。

⑦、unit:keepAliveTime 参数的时间单位: 

 简单说一下参数之间的关系:

简单说,任务执行优先使用核心线程,核心线程占用完之后,任务会进入等待队列,队列满了之后,会启用非核心线程执行任务,线程池达到最大线程数量后会触发拒绝策略,非核心线程的空闲时间超过核心时间就会被回收。

核心线程数不够会怎么处理?

当提交的任务数超过了corePoolSize,但是小于最大线程数量,线程池会创建新的线程来处理任务。当提交的任务数超过了最大线程数时,线程池会根据拒绝策略来处理任务。

举个例子说一下这些参数的变化

假设⼀个场景,线程池的配置如下:

corePoolSize = 5maximumPoolSize = 10keepAliveTime = 60秒
workQueue = LinkedBlockingQueue(容量为100)
handler = ThreadPoolExecutor.AbortPolicy()

场景⼀:当系统启动后,有 10 个任务提交到线程池。 前 5 个任务会⽴即执⾏,因为核⼼线程数⾜够容纳它们。 随后的 5 个任务会被放⼊等待队列。

场景⼆:如果此时再有 100 个任务提交到线程池。 ⼯作队列已满,线程池会创建额外的线程来执⾏这些任务,直到线程总数达到 10。 如果任务继续增加,超过了⼯作队列+最⼤线程数的限制,新来的任务会被 AbortPolicy 拒绝,抛出 RejectedExecutionException 异常。

场景三:如果任务突然减少: 核⼼线程会⼀直运⾏,⽽超出核⼼线程数的线程,会在 60 秒后回收。 

线程池的拒绝策略有哪些?

有四种:

AbortPolicy:默认的拒绝策略,会抛 RejectedExecutionException 异常。

CallerRunsPolicy:让提交任务的线程自己来执⾏这个任务,也就是调用 execute 方法的线程。

DiscardOldestPolicy:等待队列会丢弃队列中最老的⼀个任务,也就是队列中等待最久的任务,然后尝试重 新提交被拒绝的任务。

DiscardPolicy:丢弃被拒绝的任务,不做任何处理也不抛出异常。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

 

 

http://www.dtcms.com/a/584334.html

相关文章:

  • 安徽人防工程建设网站如何处理并发量大的购物网站
  • wordpress建站怎么上传手机软件开发是什么专业
  • 做网站需要用到哪些开发软件网站开发 方案概要
  • 国内知名的网站设计公司本地建设网站软件
  • 常德市做公司网站的公司快手小程序入口
  • 黑群晖的做网站文件四川教育公共信息服务平台
  • 免费做网站公司网站开发转包协议
  • 谷歌做新媒体运营的网站动易网站管理
  • 做网站时怎么让边框细一点装修公司形象墙设计
  • 网站建设方案如何讲解php网站模板修改
  • 在中国做外国网站怎么收钱建个网站需要多少钱一个
  • 深圳餐饮网站建立最方便在线网站开发
  • 网站时间显示网站建设工具
  • trs网站建设平台wordpress 调用导航栏
  • 大学有吗网站建设上海建设工程检测登记的网站
  • 凡客建网站有关性的网站
  • 建筑人才网官网96877山东济南seo整站优化
  • 商业网站建设企业网站的论坛怎么做的
  • 网站建设买了服务器后怎么做微信开放品牌
  • 小型网站开发语言工作时做网站使用软件
  • 钟表商城网站建设方案wordpress播放下载
  • 浙江新东阳建设集团有限公司网站wordpress-黄聪
  • 怎么给网站做备份呢怎么查出这个网站是谁做的
  • 如何开通免费网站杭州仪器网站制作
  • 企业网站建设源码 微信 手机中国做网站的网站
  • 建网站现软件公司注册地址和经营地址不一致可以吗
  • 微信公众号和网站建设的意义网页模板快速建站工具
  • 宝和网站建设wordpress 自定义登录界面
  • 做音乐网站不在百度做推广他会把你的网站排名弄掉
  • wordpress淘宝客插件破解版广州网站建设360网站优化