多线程思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RT-Thread使用HAL库实现双线程控制LED交替闪烁

如何创建工程我的其他文中你面有可以进去查看 1创建线程(以动态方式实现) 1-2创建函数入口 1-2启动函数 main.c文件源码 /** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date …

自动驾驶技术综述:附自动驾驶公司一览表

前言 自动驾驶技术是一项复杂的系统工程,涵盖了众多技术领域。本文将从硬件和软件两个方面,详细介绍自动驾驶汽车涉及的关键技术,希望能为您提供有益的参考。 一、硬件 自动驾驶汽车的实现离不开各种硬件的支持。以下是一张自动驾驶研究所…

【LeetCode 274】H指数

1. 题目 2. 分析 这题没啥难度,需要熟练运用Python API。 sort(reverseTrue)可以用于排序List,并且倒序排序。 3. 代码 class Solution:def hIndex(self, citations: List[int]) -> int:citations.sort(reverseTrue)res 0for idx,cite in enume…

CentOS7环境脚本一键安装MySQL8

安装包准备 获取下载地址 选择对应的下载版本,如下图,右键RPM Bundle的Download,复制下载链接地址 下载安装包 [hadoopnode3 installfile]$ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.31-1.el7.x86_64.rpm-bund…

【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF

【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF 前言一、Stirling-PDF介绍1.1 Stirling-PDF简介1.2 Stirling-PDF功能 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

游戏AI的创造思路-技术基础-sigmoid函数详解

在前面的机器学习和深度学习的内容中,大量出现了sigmoid函数,所以本篇为大家介绍下sigmoid函数,希望对大家理解前面的算法和后面的Transformer有所帮助 目录 3.8. sigmoid函数 3.8.1. 定义 3.8.2. 性质 3.8.3. 应用 3.8.4. 缺点 3.8.5.…

php,python AES/CBC/PKCS7Padding加密解密 base64/hex编码

1. python版本 import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpadclass AESUtilCBC:def __init__(self, key, iv):self.key key.encode(utf-8)self.iv iv.encode(utf-8)self.pad_length AES.block_sizedef encrypt(self, data):try…

JVM专题十一:JVM 中的收集器一

上一篇JVM专题十:JVM中的垃圾回收机制专题中,我们主要介绍了Java的垃圾机制,包括垃圾回收基本概念,重点介绍了垃圾回收机制中自动内存管理与垃圾收集算法。如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回…

Python代码打包成exe应用

目录 一、前期准备 二、Pyinstaller打包步骤 Pyinstaller参数详解 三、测试 Spec 文件相关命令 一、前期准备 (1)首先,我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。 (2)我们要先安装Pyinstalle…

Epic登录转圈/Epic登录不上一直转圈的五种办法分享

Epic Games(Epic商店)是Epic旗下的数字游戏综合平台,不仅游戏数量众多,还可以每周在上面免费领取各种类型的热门游戏,深受国内游戏玩家追捧。不少玩家反馈在登录epic账号时会遇到转圈圈的情况,一直无法登录…

cs与msf权限传递,与mimikatz抓取win2012明文密码

CS与MSF的权限互相传递抓取windows2012的明文密码 CS与MSF的权限互相传递 1、启动cs服务端 2、客户端连接 3、配置监听,并设置监听端口为9999 4、生成脚本 5、开启服务,下载并运行木马 已获取权限 6、进入msf并设置监听 7、cs新建监听,与m…

python-docx 设置页面边距、页眉页脚高度

本文目录 前言一、docx 页面边距在哪里二、对 <w:pgMar> 的详细说明1、上边距的说明2、右边距的说明3、下边距的说明4、左边距的说明5、页眉高度的说明6、页脚高度的说明三、设置 docx 页边距、页眉页脚高度1、完整代码2、代码执行效果图四、补充一些内容1、页面边距的两…

`THREE.PointsMaterial` 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。

demo案例 THREE.PointsMaterial 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性&#xff0c;比如颜色、大小和透明度。下面是对其构造函数的参数、属性和方法的详细讲解。 构造函数 const material new THREE.PointsMaterial(parameters);参数&am…

浏览器扩展V3开发系列之 chrome.commands 快捷键的用法和案例

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.commands API 允许开发者使用快捷键来执行特定的命令。 在使用 chrome.commands API 之前必须…

C# 入门—实现 Hello, World!

目录 一、.net 平台 二、.net 都能干什么&#xff1f; 三、.net 两种交互模式 四、使用 VS Code 开发 C# 程序 五、实现 Hello, World! 一、.net 平台 下载 .NET(Linux、macOS 和 Windows) (microsoft.com) .NET 简介 - .NET | Microsoft Learn C# :一种编程语言,可以开…

文件管理—linux(基础IO)

目录 ​编辑 一、C语言文件接口&#xff08;库函数&#xff09; hello.c写文件 hello.c读文件 输出信息到显示器 stdin & stdout & stderr 二、系统文件I/O&#xff08;系统调用&#xff09; hello.c 写文件&#xff1a; hello.c读文件 接口介绍 open open…

MQTT服务器/MQTT_C#客户端/Websoket连MQTT

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。 MQTT是一个基于客户端-服务器的消息发布/订…

ue 材质贴图Tiling repeat

材质问题&#xff0c;如下 贴图显然不符合逻辑&#xff0c;太大&#xff0c;并且是一次性贴图 换一个红砖纹理&#xff0c;就看清了&#xff0c;砖太大了 修改&#xff1a; 拖出一个TexCoord&#xff0c;代表坐标&#xff0c;拖出一个参数&#xff0c;代表次数&#xff0c;如…

Python数据分析之-Oracle数据库连接

文章目录 cx_Oracle 介绍cx_Oracle运行原理cx_Oracle 安装linux环境安装windows环境安装 cx_Oracle 使用单独使用结合Pandas使用 参考资料 cx_Oracle 介绍 cx_Oracle 8是一个Python扩展模块&#xff0c;它提供了对Oracle数据库的访问能力。以下是cx_Oracle 8的一些关键特性和功…

【学习笔记】Hive

Hive 作为数仓应用工具&#xff0c;对比 RDBMS&#xff08;关系型数据库&#xff09; 有3个“不能”&#xff1a; 不能像 RDBMS 一般实时响应&#xff0c;Hive 查询延时大&#xff1b; 不能像 RDBMS 做事务型查询&#xff0c;Hive 没有事务机制&#xff1b; 不能像 RDBMS 做行…