多线程思维导图

多线程
    线程是一个程序内部的一条执行流程
        多线程的好处————消息通信,网页浏览等等
        多线程是指从软硬件上实现多条执行流程的技术
        并发和并行同时执行
    多线程的创建
        Java.Long包下的Thread类
            定义一个子类继承Tread,重写run方法(方法里面是另一个线程),再在主程序中创建子类的对象,调用start()方法
                优点:编码简单
                缺点:线程类已经继承Tread,无法继承其他类,不利于功能扩展
                注意事项:1 启动线程时必须调用start()方法,2 不要把主线程任务放在启动子线程之前
        实现Runnable接口
            线程创建方式一:定义一个子类实现Runnable,重写run方法(方法里面是另一个线程),再在主程序中创建子类的对象,调用start()方法
                优点:任务类只是实现接口,可以继续继承其他类,实现其他接口,扩展性强
                缺点:~~需要多创建一个Runnable对象
            线程创建方式二:匿名内部类的创建方式
        实现Callable接口
            前面两种线程创建方式存在一个无返回值的问题
            利用Callable接口和FutureTast类来实现:创建任务对象--->步骤一:定义一个类实现Callable接口,重写call方法,封装要做的事情,和要返回的数据。把Callable类型的对象封装成FurureTast(线程任务对象)。步骤二:把线程任务对象交给Thread对象后调用start()方法
                优点:直接返回线程执行完成的结果
                缺点:编码复杂
    线程的常用方法
        run()
            线程的任务方法
        start()
            启动线程
        getName()
            获取当前线程抿成,默认为Thread-索引
        setName()
            设置线程名称
        currentThread()
            获取当前执行的线程对象
        sleep(休眠多少毫秒)
            休眠多少毫秒后继续执行
        join()
            让调用当前这个方法的线程先执行完
    线程安全
        发生原因:多个线程同时访问同一个共享资源,且存在修改该资源
        解决方法:
            线程同步
                让多个线程实现先后依次访问共享资源
                    方案一:加锁
                        实现方法一:同步代码块
                            作用:把访问共享资源的核心代码上锁
                            原理:每次只允许一个线程加锁后进入,执行完毕之后自动解锁
                            注意事项:同步锁必须是同一把;锁的使用最好使用this;如果时静态方法时,建议使用类名.class来代表锁
                        实现方法二:同步方法
                            作用:把访问共享资源的核心方法上锁
                            原理:每次只允许一个线程进入方法;如果方法是实例方法:同步方法默认使用this作为锁对象;如果方法是静态方法:同步方法默认使用类名.class作为锁对象
                        实现方法三:Lock锁
                            方便于手动解锁和上锁:Lock lk = new ReentrantLock
                            lk.lock 和 lk.unlock
                            注意事项:放在一个try{}cath{}final{}里面,保证中间代码出现错误时,能够及时解锁
    线程通信
        解释:当多个线程共同操作共享资源是,线程间通过某种方式互相告诉自己的状态,相互协调,避免无效的资源争夺
        常见模型
            生产者与消费者模型
                生产者线程负责生产数据
                消费者线程负责消费生产者产生的数据
                注意:生产者生产完数据应该等待自己,通知消费者;消费者消费完数据也应该等待自己,再通知生产者生产!
    线程池
        解释:线程池是一个可以复用线程的技术
        好处
            降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
            提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行。
            提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,监控和调优。
        线程池的的创建:ExecutorService接口
            ThreadPoolExecutor(核心线程数量,线程池最大线程数量,临时线程的存活时间,临时线程存活单位(秒、分、时、天),线程池任务队列,指定线程池的线程工厂,指定线程池的任务拒绝策略)==========七个参数
                常用方法:
                    execute()执行Runable任务
                    submit()执行Callable任务,返回未来对象,用于获取线程返回的结果
                    shutdown()等全部任务执行完毕后关闭线程池
                    shutdownNow() 立即关闭线程池,停止正在执行的任务,并返回队列中未执行的任务。
            Excutors类调用方法:Executors.newFixedThreadPool()
                常用方法
                    newFixedTheradPool() 创建固定线程数量的线程池,如果某个线程应为执行异常而结束,那么线程池会补充一个新线程替代他。
                    newSingleThreadexcutor()创建只有一个线程的线程池对象,如果该线程出现异常而结束,那么线程池会补充一个新的线程
                    newCachedThreadPool()线程数量随着任务增加而增加,如果线程任务执行完毕且空闲了60秒则会被回收掉
                    newScheduledThreadPool()创建一个线程池,可以实现在给定的延迟后运行任务,或者定期执行任务。
                可能出现风险:大型并发系统环境中使用Excutors如果不注意可能会出现风险
            临时线程创建规则:新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程
            拒绝新任务规则:核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始拒绝任务。
            核心线程数量的配置方法:                                            计算密集型的任务: 核心线程数 = CPU的核数+1           IO密集型的任务: 核心线程数 = CPU核数  x 2

===========================多线程语法思维导图=============================

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

突然断供中国!OpenAI变CloseAI,用户连夜搬家

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 OpenAI,这把变成CloseAI了。 6月25日早上,有中国开发者表示收到了来自OpenAI的“警告信”:将采取额外措施停止其不支持的地区的API(应用接口&#xff09…

我对AI赋能的未来畅想

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

【Java Web】XML格式文件

目录 一、XML是什么 二、常见配置文件类型 *.properties类型: *.xml类型: 三、DOM4J读取xml配置文件 3.1 DOM4J的使用步骤 3.2 DOM4J的API介绍 一、XML是什么 XML即可扩展的标记语言,由标记语言可知其基本语法和HTML一样都是由标签构成的文件…

springboot vue 开源 会员收银系统 (8) 收银台、开卡结算及订单的优化升级

前言 完整版演示 开发版演示 在之前的开发进程中,我们基本搭建了收银台的基础。这次着重梳理一下收银台相关功能的开发及优化情况。 1.会员查询与开卡 收银台新增加了会员筛选功能 并且会员和会员卡是一对多的关系 理论可以开无数张卡 默认选择一张卡 会员卡选择…

stm32学习笔记---TIM输出比较(代码部分)PWM驱动LED呼吸灯/舵机/直流电机

目录 第一个工程:PWM驱动LED呼吸灯 PWM.c 初始化PWM步骤 TIM的库函数 TIM_OCStructInit TIM_CtrlPWMOutputs TIM_CCxCmd和TIM_CCxNCmd TIM_SelectOCxM 四个单独更改CCR寄存器值的函数 四个初始化定时器的通道的函数 给结构体一次性都赋初始值的函数 如何…

从写下第1个脚本到年薪40W,我的测试开发心路历程!

对于任何职业来说,薪资始终都会是众多追求的重要部分。前几年测试行业还是风口,但是随着不断新鲜血液的加入,再加上就业大环境不好,企业也都在“降本增效”。目前内卷也是越来越激烈。不得不承认当下的现状,已经不仅仅…

引导过程与服务器控制

一、引导过程 1.开机自检 服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移 交系统控制权&#xff0c…

AI X HI:塑造数智时代的人类镜像,网易这场分享不能错过!

2001 年,网易正式成立在线游戏事业部。从那以后,网易孵化了许多出圈的精品游戏,跻身成为全球七大游戏公司之一。这些游戏产品之所以能够广受玩家好评,并保持常青,一方面源于十年磨一剑的精良品质,另一方面则…

[油猴脚本] Image To Ascii 快速转换审计网站图片中敏感信息插件

项目地址:https://github.com/MartinxMax/ImageToAscii 导入 将ImagetoAscii.user.js导入油猴 进行按照 访问网站分析图片 当鼠标靠近图片时会出现分析按钮 通过审查图片信息,我们可以快速发现这张图片存在PHP代码。 当然在渗透测试中,你可以快速查看上传的图片木马中PHP代码…

PS系统教程30

图层蒙版组合使用 案例介绍 全选背景图-复制背景图粘贴背景图CtrlI反选背景色填充黑色快速选区工具框柱需要素材画笔涂抹白色 步骤截图 1-3 4-5 图层蒙版与渐变工具结合使用 案例2 注意 使用PS的渐变工具覆盖全部的原因可能包括操作不当或设置错误。 操作不当&#xff1…

C++系列-String(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” assign 这个接口的目的是用一个新的值代替之前的那个值 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<list> #include&l…

华三交换机的软件版本升级操作

升级操作很常见&#xff0c;掌握方法是关键 实验环境&#xff1a;1台华三S6520-EI交换机&#xff0c;版本从2432P03升级成2432P05。 整体思路&#xff1a; 1.先查验软件版本 2.官网下载对于设备型号的软件版本 3.配置交换机地址使得与电脑进行通信&#xff0c;使用TFTP/FTP工…

Swift 周报 第五十五期

文章目录 前言新闻和社区苹果公司据悉将推出密码管理应用三大指数涨跌不一&#xff0c;苹果重新夺回美股第二大上市公司宝座苹果iOS 18新动向&#xff1a;AI功能强化隐私保护&#xff0c;用户自主选择启用 提案通过的提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言…

微信小程序navigateTo异常(APP-SERVICE-SDK:Unknown URL)

背景 在开发小程序时&#xff0c;可能会用到banner&#xff0c;通过banner跳转至各种子页面。但是因为小程序自身的因素&#xff0c;有些是不允许的&#xff0c;比如通过banner跳转一个http/https链接。如果使用 wx.navigateTo完成跳转时&#xff0c;就会发生异常。 navigate…

第二十八周代码

B3631 单向链表 题目链接 【参考代码】 list的简介及使用 80%通过率 #include <bits/stdc.h> using namespace std;int main() {list<int> list;list.push_back(1);int q;cin>>q;while(q--){int operation;cin>>operation;if(operation 1){int x,…

高考成绩加分,西藏学生推荐使用的《藏文翻译词典》APP,藏文作文高考大纲,初中高中学习内容与考试同步更新!

2024年高考成绩出炉啦&#xff01;在这个特别的时刻&#xff0c;我想向大家表达最真挚的祝贺。高考不仅是一场考试&#xff0c;更是你多年学习旅程的一次总结。当你的成绩揭晓&#xff0c;无论结果如何&#xff0c;你都应该为自己感到骄傲。 在高原&#xff0c;藏语如同雪山上…

【vue scrollTo 数据无限滚动 】

vue数据无限滚动 参考来源 Vue3 实现消息无限滚动的新思路 —— 林三心不学挖掘机 完整代码中项目中使用了vuetify&#xff0c;估div内的class会代表了对应的样式&#xff0c;根据需要自行删减。 功能实现主要依赖js代码部分。 鼠标悬浮停止滚动&#xff0c;鼠标离开恢复滚动在…

C#+uni-app医院HIS预约挂号系统源码 看病挂号快人一步

​​​​​​​ 提到去大型医院机构就诊时&#xff0c;许多人都感到恐惧。有些人一旦走进医院的门诊大厅&#xff0c;就感到迷茫&#xff0c;既无法理解导医台医生的建议&#xff0c;也找不到应该去哪个科室进行检查。实际上&#xff0c;就医也是一门学问&#xff0c;如何优化…

刚体力学基础

转动惯量 刚体 转动 常见物体转动惯量 平行轴定理 转动定律 牛顿第二定律的推广 M J*α 例题 刚体的角动量守恒 刚体的动能定理 刚体与质点的对比

倍增法找lca——最近公共祖先

对于结点x和y&#xff0c;需要找他们的最近公共祖先 一个最简单的办法就是沿着x和y的父节点一个一个往上找 这样的时间复杂度是o(n)&#xff0c;对于较大的数据量会TLE 今天要使用的方法是利用倍增来加速这个找lca的过程 倍增算法&#xff1a; 按2的倍数来往上找&#xff0…