淘优惠

淘优惠

java架构师实战多线程线程池分析 javaee初阶多线程基础篇线程池

热门文章 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

java多线程框架,java多线程技术,java多线程编程实战指南(核心篇),图解java多线程设计模式

在多线程当中,并发程度会不断提升,随之带来的是线程频繁的创建和销毁,此时程序的开销就会变大,为了改善这个现象,就引入了线程池,程序将创建好的线程放入到“线程池”中,当程序需要用时,可以直接在这个“池子”中取出来,线程用完之后再放入到“池子”中。这样在就不会再频繁的创建和销毁了,可以使程序开销减小,效率更高。

在创建、销毁线程时我们时是交给操作系统内核来完成的,?而我们使用线程池调度是以用户态实现的。

如果将任务交给操作系统的内核去完成,它的完成时间是不可控的,这是为什么呢?原因在于:内核需要对多个任务提供服务,在你交给它任务时,它可能无法仅仅单一的完成你交与的任务,可能还需要完成别人交与它的任务。

而用户态就不一样了,用户态就仅会对自己的任务负责,因此效率更高,开销更小。

🐣下面这个例子可以让你更加容易理解(银行办事):

有一天你去银行办理业务,排队排了好久,工作人员问你:拿身份证复印件了吗?你心想:卧槽还要这个。你回答:没有拿。然后工作人员说,没关系,你有两个选择:

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秒将收回并移出缓存         ExecutorSer

c语言如何输入输出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语言基础
30018
TiAmoZhang
HTML5 游戏开发实战 | 五子棋
五子棋是一种家喻户晓的棋类游戏,它的多变吸引了无数的玩家。本章首先实现单机五子棋游戏(两人轮流下),而后改进为人机对战版。整个游戏棋盘格数为 15×15,单击鼠标落子,黑子先落。在每次下棋子前,程序先判断该处有无棋子,有则不能落子,超出边界不能落子。任何一方有横向、竖向、斜向、反斜向连到 5 个棋子则胜利。
23157
长沙红胖子Qt
统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序
在【【微信】】上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。
26427
倚天架构-张先国
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
29475
弹性计算-百晓生
全面解析 | 大模型时代如何利用弹性计算服务应对大算力挑战
2023年6月20日,阿里云弹性计算团队与智东西公开课联合出品的系列课程「阿里云弹性计算技术公开课」正式播出,阿里云弹性计算产品专家张新涛作为该系列课程首位主讲人,带来了主题为《大模型时代如何应对大算力挑战》的课程分享,本次课程也在阿里云官网、钉钉视频号、阿里云官方视频号、阿里云开发者视频号、阿里云创新中心直播间&视频号等多平台同步播出。
18233
阿里开发者
这些年在阿里学到的方法论
本文从做事方法、思维方式、目标管理、数据分析、用户增长几方面介绍了相关的方法论,希望能给读者带来一些帮助!
17314
江上清风山间明月
Flutter数据库操作看这一篇就够了
Flutter数据库操作看这一篇就够了
16110
激流丶
深入浅出设计模式 - 代理模式
深入浅出设计模式 - 代理模式
11592
timerring
神经网络入门基础知识
神经网络入门基础知识
16613
坐落于亚洲之东方
C++基础入门教程(1)
C++基础入门教程(1)
23122
远方并不远。
SpringBoot 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群号是多少里,我们相互助力。你愿意和我们一起玩转天猫年中大促吗?