多线程思维导图

news2024/11/18 1:59:26

多线程
    线程是一个程序内部的一条执行流程
        多线程的好处————消息通信,网页浏览等等
        多线程是指从软硬件上实现多条执行流程的技术
        并发和并行同时执行
    多线程的创建
        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.coloradmin.cn/o/1863930.html

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

相关文章

PTE-靶场训练-1

PTE-靶场训练实战笔记 靶场搭建 靶场下载链接: https://pan.baidu.com/s/1ce1Kk0hSYlxrUoRTnNsiKA?pwdha1x vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置好后reboot重启一下即可,然后访问81-85端口,共5题。 因为靶场出了问题&a…

OpenAI用GPT-4o打造癌症筛查AI助手;手机就能检测中风,准确率达 82%!中国气象局发布AI气象大模型...

AI for Science 企业动态速览—— * 皇家墨尔本大学用 AI 检测患者中风,准确率达 82% * OpenAI 用 GPT-4o 模型打造癌症筛查 AI 助手 * 中国气象局发布 AI 气象大模型风清、风雷、风顺 * AI 药企英矽智能:小分子抑制剂已完成中国 IIa 期临床试验全部患者…

【MySQL】数据库的索引机制

文章目录 前言1. 索引是什么2. 索引的优缺点2.1 优点2.2 缺点 3. 索引的操作3.1 创建索引3.2 查看索引3.3 删除索引 4. 索引的存储原理4.1 B树4.2 B树 结语 前言 在数据库中,我们经常使用到的操作就是查询,当数据量小的时候,查询的速度很快&…

Windows Server 2019 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板

Windows Server 2019 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板 2024 年 6 月版本更新,现在自动运行 sysprep,支持 ESXi Host Client 部署 请访问原文链接:https://sysin.org/blog/windows-server-2019-ovf/,查看最新…

Charles抓包工具系列文章(六)-- Block List 和 Allow List (黑白名单)

一、背景 Allow List 是白名单,请求的接口如果在白名单里,就被允许。 Block List 是黑名单,请求的接口如果在黑名单里,就被拒绝。 黑白名单是可以一起启用的,优先黑名单。 二、白名单 Allow List 1、新增白名单接口…

201.回溯算法:全排列(力扣)

class Solution { public:vector<int> res; // 用于存储当前排列组合vector<vector<int>> result; // 用于存储所有的排列组合void backtracing(vector<int>& nums, vector<bool>& used) {// 如果当前排列组合的长度等于 nums 的长度&am…

HDOJ5616 Jam‘s balance

目录 HDOJ5616 Jams balance题目描述背景输入输出 题解解法一解法二优化 打赏 HDOJ5616 Jam’s balance 题目描述 背景 有 N N N个已知质量的砝码&#xff0c;分别询问给出的 M M M个质量能否被称出 输入 第一行输入一个变量 T T T&#xff0c;表示有 T T T组数据&#xf…

二轮平衡车直立控制VREP仿真及python上位机监控实现基础环境

目录 1.引言2. 实验流程2.1. V-REP环境搭建2.2. 电机和部件建模 3.控制策略描述3.1. PID控制3. 2. 控制参数调整 4.代码结构5.结论配套环境和源代码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 1.引言 在机器人学和自动化领域…

东南亚本地化游戏

通常&#xff0c;亚洲电子游戏市场首先与中国联系在一起。但最近&#xff0c;分析人士越来越关注一个邻近地区&#xff1a;东南亚。而且有充分的理由。 该地区包括中南半岛、马来群岛和邻近岛屿上的十一个国家。1967年&#xff0c;其中10个国家&#xff08;除东帝汶外&#xf…

.NET C# 使用GDAL将mdb转换gdb数据

.NET C# 使用GDAL将mdb转换gdb数据 目录 .NET C# 使用GDAL将mdb转换gdb数据1 环境2 Nuget3 Code 1 环境 VisualStudio2022 .NET6 GDAL 3.8.5 2 Nuget 3 Code FeatureExtension.cs public static class FeatureExtension {[DllImport("gdal.dll", EntryPoint &…

各大广告商竞相厮杀下,诞生了一个偏门的副业方式

前段时间&#xff0c;想买摩托车&#xff0c;但是媳妇不让买&#xff0c;所以我打算偷偷买&#xff0c;然后萌生了去摆摊赚钱的想法&#xff0c;但是还没有实施就在网上接触到了“某赚”APP&#xff0c;于是一发不可收拾&#xff0c;用我的话来说&#xff0c;我做的不是副业&am…

从一万英尺外看libevent(源码刨析)

从一万英尺外看libevent 温馨提示&#xff1a;阅读时间大概二十分钟 前言 Libevent是用于编写高速可移植非阻塞IO应用的库&#xff0c;其设计目标是&#xff1a; 可移植性&#xff1a;使用libevent编写的程序应该可以在libevent支持的所有平台上工作。即使没有好的方式进行非…

多业态、多品牌企业,如何实现积分通积通兑?(附大会员方案)

2021年&#xff0c;龙湖升级珑珠为全业态通用积分&#xff0c;招商荟深度接入招商蛇口大会员体系建设&#xff1b;2022年&#xff0c;华润置地大会员“万象星”正式上线&#xff1b;2023年&#xff0c;“蒙牛生活家会员中心”全新上线…… 越来越多地产、零售等行业的集团品牌…

【学习】如何利用Python技术进行软件测试相关工作

Python是一种广泛使用的高级编程语言&#xff0c;它因其简洁的语法、强大的库支持和跨平台特性而受到开发者的喜爱。在软件测试领域&#xff0c;Python同样发挥着重要作用&#xff0c;它可以帮助测试人员编写自动化测试脚本、进行接口测试、性能测试、以及处理测试数据等。以下…

迅为RK3588开发板支持LVDS信号,标准 HDMI信号,IMIPI信号

性能强--iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代ALoT高端应用芯片&#xff0c;采用8nm LP制程&#xff0c;搭载八核64位CPU&#xff0c;四核Cortex-A76和四核Cortex-A55架构&#xff0c;主频高达2.4GHZ&#xff0c;8GB内存&#xff0c;32GB EMMC。 四核心…

2024第十三届中国PMO大会主持人介绍

全国PMO专业人士年度盛会 由PMO评论主办的2024第十三届中国PMO大会邀请了到十几位知名企业的PMO和项目管理专家来担任大会主持人。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 主持人介绍 肖杨&#xff0c;国际知名组织级项目管理专家&#xff0c;微薄之力…

[深度学习] 自编码器Autoencoder

自编码器&#xff08;Autoencoder&#xff09;是一种无监督学习算法&#xff0c;主要用于数据的降维、特征提取和数据重建。自编码器由两个主要部分组成&#xff1a;编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;。其基本思想是将输入数据映射…

软考《信息系统运行管理员》-1.2信息系统运维

1.2信息系统运维 传统运维模式&#xff08;软件&#xff09; 泛化&#xff1a;软件交付后围绕其所做的任何工作纠错&#xff1a;软件运行中错误的发现和改正适应&#xff1a;为适应环境做出的改变用户支持&#xff1a;为软件用户提供的支持 新的不同视角下的运维 “管理”的…

【八股系列】Vue中的<keep-alive>组件:深入解析与实践指南

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【探索响应式布局的奥秘&#xff1a;关键技术与实战代码示例】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐评论…

三、用户中心项目笔记----后端多环境实战+原始部署

后端多环境主要是修改&#xff1a; 依赖的环境地址 数据库地址 缓存地址 消息队列地址 项目端口号 服务器配置 后端怎么去区分不同的环境&#xff1f; 我们后端的SpringBoot项目&#xff0c;通过application.yml添加不同后缀来区分配置文件 application.yml就是公共的配置&a…