java架构师实战多线程线程池分析 javaee初阶多线程基础篇线程池
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
在多线程当中,并发程度会不断提升,随之带来的是线程频繁的创建和销毁,此时程序的开销就会变大,为了改善这个现象,就引入了线程池,程序将创建好的线程放入到“线程池”中,当程序需要用时,可以直接在这个“池子”中取出来,线程用完之后再放入到“池子”中。这样在就不会再频繁的创建和销毁了,可以使程序开销减小,效率更高。
在创建、销毁线程时我们时是交给操作系统内核来完成的,?而我们使用线程池调度是以用户态实现的。
如果将任务交给操作系统的内核去完成,它的完成时间是不可控的,这是为什么呢?原因在于:内核需要对多个任务提供服务,在你交给它任务时,它可能无法仅仅单一的完成你交与的任务,可能还需要完成别人交与它的任务。
而用户态就不一样了,用户态就仅会对自己的任务负责,因此效率更高,开销更小。
🐣下面这个例子可以让你更加容易理解(银行办事):
有一天你去银行办理业务,排队排了好久,工作人员问你:拿身份证复印件了吗?你心想:卧槽还要这个。你回答:没有拿。然后工作人员说,没关系,你有两个选择:
1.我给你打印然后办理。(相当于内核态)
2.你自己打印然后给我。 (相当于用户态)
选择1:当让工作人员打印,可能他手头上出了你的打印东西在这个事还有其他的事,因此让他帮打印的话,打印好就不知道事猴年马月了。
选择2: 我自己直接去大厅的复印机这里,直接就打印好了,然后拿给工作人员,办完就跑。
很明显,在1、2选择中,选择2更高效,这也就是为什么线程池更高效了。 ?
Java中提供了线程池的标准类(ThreadPoolExecutor),构造方法(常用的一个)如下:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAli【【微信】】, TimeUnit unit, BlockingQueue<Runnable> workQueue, 【【微信】】actory, RejectedExecutionHandler 【【微信】】)
对构造方法中参数解读
1. corePoolSize(核心线程);相对于公司的正式员工,签了劳动合同的,不能够随意开除。
2.maximumPoolSize (最大线程数):线程最多不能超过这这个数,最大线程数=核心线程+非核心线程;非核心线程就相当于公司招来的实现生。
3.keepAli【【微信】】(非核心线程的存活时间):如果找来的实习生一直摸鱼没有活干,超过这个时间就将他炒鱿鱼。
4.unit:上方存活时间的单位
5.workQueue(用于缓存未执行的任务):线程的任务队列,通过submit方法加入的任务进入这个队列
6.threadFactory(线程工厂):线程的创建方案。
7.【【微信】】(拒绝策略):当任务对象线程满了的话,应该如何做出回答。
在Java总【【微信】】有四种拒绝策略:
线程池在实现时,我们需要用到工具类Executors,调用里面的静态方法来完成创建的,他的所有方法的返回值都是ExecutorService。
【【微信】】.util.【【微信】】.*; public class testDemo { public static 【【微信】】(String[] args) { //创建一个固定数量的线程池 // 1. 创建一个操作*队列且固定大小线程池 ExecutorSer【【微信】】 = Executors.newFixedThreadPool(10); //线程池中线程的数量是动态变化的 // 2. 用来处理大量短时间工作任务的线程池,如果池中没有可用的线程将创建新的线程,如果线程空闲60秒将收回并移出缓存 ExecutorSerc语言如何输入输出5行字符菱形 c语言输入数字打印菱形
c语言输出五个数,c语言每行输出5个数字怎么弄,c语言每行输入五个,c语言中怎么控制一行输出5个字符
技术分享 | 如何基于阿里云AIACC加速【【微信】】绘画弹性计算-百晓生AIACC是基于阿里云IaaS资源推出的神龙AI性能加速套件,用于优化基于AI主流计算框架搭建的模型,能显著提升训练和推理性能。AIACC神龙AI推理加速套件由【【微信】】(Pytorch推理加速引擎)、【【微信】】(MLIR推理加速引擎)、【【微信】】(AIACC算子深度加速引擎)等组件构成。AIACC神龙AI性能加速套件能够为【【微信】】提供加速优化支持,在512x512分辨率下,可将单张图片的延迟从2秒降低至0.88秒,吞吐提速至原来的2.2倍。23036一份很详细的Python语言基础丶重明一份很详细的Python语言基础30018HTML5 游戏开发实战 | 五子棋TiAmoZhang五子棋是一种家喻户晓的棋类游戏,它的多变吸引了无数的玩家。本章首先实现单机五子棋游戏(两人轮流下),而后改进为人机对战版。整个游戏棋盘格数为 15×15,单击鼠标落子,黑子先落。在每次下棋子前,程序先判断该处有无棋子,有则不能落子,超出边界不能落子。任何一方有横向、竖向、斜向、反斜向连到 5 个棋子则胜利。23157统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序长沙红胖子Qt在【【微信】】上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。26427Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践倚天架构-张先国Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。29475全面解析 | 大模型时代如何利用弹性计算服务应对大算力挑战弹性计算-百晓生2023年6月20日,阿里云弹性计算团队与智东西公开课联合出品的系列课程「阿里云弹性计算技术公开课」正式播出,阿里云弹性计算产品专家张新涛作为该系列课程首位主讲人,带来了主题为《大模型时代如何应对大算力挑战》的课程分享,本次课程也在阿里云官网、钉钉视频号、阿里云官方视频号、阿里云开发者视频号、阿里云创新中心直播间&视频号等多平台同步播出。18233这些年在阿里学到的方法论阿里开发者本文从做事方法、思维方式、目标管理、数据分析、用户增长几方面介绍了相关的方法论,希望能给读者带来一些帮助!17314Flutter数据库操作看这一篇就够了江上清风山间明月Flutter数据库操作看这一篇就够了16110深入浅出设计模式 - 代理模式激流丶深入浅出设计模式 - 代理模式11592神经网络入门基础知识timerring神经网络入门基础知识16613C++基础入门教程(1)坐落于亚洲之东方C++基础入门教程(1)23122SpringBoot bean自动装配原理,这一篇就够了! 1远方并不远。SpringBoot bean自动装配原理,这一篇就够了!5747深入理解Vue中的异步更新机制和$【【微信】】方法远航探索在Vue开发中,我们经常会遇到需要在 DOM 更新完成后执行某些操作的情况。为了解决这个问题,Vue提供了`$【【微信】】`方法,它可以让我们在下次 DOM 更新完成后执行回调函数。本文将深入探讨Vue的异步更新机制、`$【【微信】】`的原理和使用场景,以及分别在 Vue2.x 与 Vue3.x 中的相同点和区别。12052《网络安全0-100》网络安全工具一只正《网络安全0-100》网络安全工具23103关于“重构”的一些思考耿记磊本文将从一个新人数次修改CR comments的角度探讨代码重构的定义、目的以及常见的重构方法,并以简单的代码案例来说明代码重构的具体实现。4518
..天猫互助微信群二维码2023,天猫互助微信群二维码2023,天猫助力成功后会显示什么信息,在这个2023年天猫618 理想生活狂欢季天猫互助群qq群号是多少里,我们相互助力。你愿意和我们一起玩转天猫年中大促吗?版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。