独角兽大牛纯手肛出的一份多线程实战文档,莫把它丢进收藏夹吃灰

news2024/11/23 10:45:18

为什么用多线程?

在操作系统级别上,程序的执行都是以进程为单位,而每一个进程中通常都会有多个线程线程互不影响地并发执行,那么为什么要使用多线程呢?其实,多线程的使用为程序研发带来了巨大的便利,具体而言,有以下几方面的内容:
(1)使用多线程可以减少程序的响应时间。在单线程(单线程指的是程序执行过程中只有一个有效操作的序列,不同操作之间都有明确的执行先后顺序)的情况下,如果某个程序很耗时或者陷入长时间等待(如等待网络响应),此时程序将不会相应鼠标和键盘等操作,使用多线程后,可以把这个耗时的线程分配到一个单独的线程去执行,从而是程序具备了更好的交互性。
(2)与进程相比,线程的创建和切换开销更小。由于启动一个新的线程必须给这个线程分配独立的地址空间,建立许多数据结构来维护线程代码段、数据段等信息,而运行于同一个进程内的线程共享代码段、数据段,线程的启动或切换的开销就比进程要少很多。同时多线程在数据共享方面效率非常高。
(3)多CPU或多核心计算机本身就具有执行多线程的能力,如果使用单个线程,将无法重复利用计算机资源,造成资源的巨大浪费。因此在多CPU计算机上使用多线程能提高CPU的利用率。
(4)使用多线程能简化程序的结构,使用程序便于理解和维护。一个非常复杂的进程可以分成多个线程来执行。
这里分享一份独角兽大牛纯手肛出的一份多线程实战文档,内容干货满满,千万别把它丢进收藏夹吃灰

一、什么是多线程

1.初识多线程

1.1介绍进程

1.2回到线程

1.3进程与线程

1.4并行与并发

1.5Java实现多线程

1.5.1继承Thread,重写run方法

1.5.2实现Runnable接口,重写run方法

1.6Java实现多线程需要注意的细节

二、Thread类解析

1.Thread线程类API

1.1设置线程名

1.2守护线程

1.3优先级线程

1.4线程生命周期

1.4.1sleep方法

1.4.2yield方法

1.4.3join方法

1.4.3interrupt方法

三、使用多线程需要注意的问题

1、使用多线程遇到的问题

1.1线程安全问题

1.3性能问题

2、对象的发布与逸出

2.1安全发布对象

3、解决多线程遇到的问题

3.1简述解决线程安全性的办法

3.2原子性和可见性

3.2.1原子性

3.2.2可见性

3.3线程封闭

3.4不变性

3.5线程安全性委托

4、多线程需要注意的事 -总结

四、synchronized锁和lock锁

1、synchronized锁

1.1synchronized锁是什么?

1.2synchronized用处是什么?

1.3synchronized的原理

1.4synchronized如何使用

1.4.1修饰普通方法法:

1.4.2修饰代码块:

1.4.3修饰静态方法

1.4.4类锁与对象锁

1.5重入锁

1.6释放锁的时机

2、Lock显式锁

2.1Lock显示锁简单介绍

2.2synchronized锁和Lock锁使⽤哪个

2.3公平锁

3、Java锁简单总结

五、AQS

1、AQS是什么?

2、简单看看AQS

2.1同步状态

2.2先进先出队列

2.3acquire方法

2.4release方法

六、ReentrantLock和ReentrantReadWriteLock

1、ReentrantLock锁

1.1内部类

1.2构造方法

1.3非公平lock方法

1.4公平lock方法

1.5unlock方法

2、ReentrantReadWriteLock

2.1ReentrantReadWriteLock内部类

2.2读锁和写锁的状态表示

2.3写锁的获取

2.4读锁获取

3、最后

七、线程池

1、线程池简介

2、JDK提供的线程池API

2.1ForkJoinPool线程池

2.2补充:Callable和Future

3、ThreadPoolExecutor详解

3.1内部状态

3.2已默认实现的池

3.2.1newFixedThreadPool

3.2.2newCachedThreadPool

3.2.3SingleThreadExecutor

3.3构造方法

4、execute执行方法

5、线程池关闭

八、死锁

1、死锁讲解

1.1锁顺序死锁

1.2动态锁顺序死锁

1.3协作对象之间发生死锁

2、避免死锁的方法

2.1固定锁顺序避免死锁

2.2开放调用避免死锁

2.3使用定时锁

2.4死锁检测

3、死锁总结

九、线程常用的工具类

1、CountDownLatch

1.1CountDownLatch简介

1.2CountDownLatch例子

2、CyclicBarrier

2.1CyclicBarrier简介

2.2CyclicBarrier例子

3、Semaphore

3.1Semaphore简介

3.2Semaphore例子

4、总结

十、Atomic

1、基础铺垫

1.2CAS再来看看

1.2.1CAS失败重试(⾃旋)

1.2.2CAS失败什么都不做

2、原子变量类简单介绍

2.1原子变量类使用

2.2ABA问题

2.3解决ABA问题

2.4LongAdder性能比AtomicLong要好

十一、ThreadLocal

1、什么是ThreadLocal

2、为什么要学习ThreadLocal?

2.1管理Connection

2.2避免一些参数传递

3、ThreadLocal实现的原理

3.1ThreadLocal原理总结

4、避免内存泄露

5、总结

目录

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

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

相关文章

删除重复数字的三种方法(详解)

前言:本期是关于去重数字的三种方法详解,今天你c了吗? 输入描述: 第一行,输入一个整数n,表示序列有n个整数。 第二行输入n个整数(每个整数大于等于1,小于等于1000)&…

关于模板字面量,我有点好奇它的内部结构

前言 最近翻看源码的时候,发现一些有趣的 JS 的知识点,基于日常的开发经验,我做了一些联想和对比。整个过程充满了乐趣。 于是我想,是不是可以延续这种创意带来的学习的乐趣。 带的富含创造力夜晚的 buff,确实让我拥…

一、系统编程常用api

一、文件io文件io是linux系统提供的接口,针对文件和磁盘进行操作,不带缓存机制标准io是c语言函数库里的标准io模型,在stdio.h中定义,通过缓冲区操作文件,带有缓存机制标准 IO 和文件 IO 的区别如下图所示:文…

SSD(固态) VS HDD(机械),购买指南

大多数人买电脑的时候纠结买固态硬盘(SSD)还是机械硬盘(HDD)。哪个是最佳选择呢,是固态硬盘还是机械硬盘呢?这个问题没有直接的答案,每个购买者有不同的需求, 需要根据需求做选择。这些需求像是性能、和预算…

DS18B20测量温度液晶1602显示

DS18B20温度传感器简介DS18B20是一种数字温度传感器。它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点。DS18B20温度传感器特点1、单线接口:DS18B20仅需一条线可实现与微处理器双向通信。…

泰山服务器板载 HNS3 网卡绑核无法充分利用 CPU 的解决思路

文章目录前言解决方案排查过程应用程序运行环境与方式检查是否存在 irqbalance 进程检查中断号对应的 CPU 亲和尝试其他绑核方式尝试调整队列数量:核心数量为 2:1前言 前段时间在泰山服务器上进行性能测试,预期是应用进程能够占满机器大部分 CPU。但实际上&#xf…

书城第二阶段——用户注册和登陆

目录0.0 JavaEE 项目的三层架构0.1 项目阶段二:用户注册和登陆的实现。1、先创建书城需要的数据库和表。2、编写数据库表对应的JavaBean对象。3、编写工具类 JdbcUtils3.1、导入需要的 jar 包(数据库和连接池需要):3.2、在 src 源…

钉钉一键登录第三方网站

钉钉一键登录第三方网站序钉钉开发者后台H5微应用应用代码开发登录页面login.html登录实现LoginController.javapom.xml增加一键登录效果展示序 企业内部系统已经做过了钉钉扫码登录,现在需要添加钉钉一键登录第三方网站功能,这里主要记录一键登录整个实…

物联网终端设备的工作原理和功能讲解

物联网终端设备是实现数据采集和数据传输的设备,它连接了传感网络层和传输网络层,起到了数据采集、数据处理、数据加密和传输的功能。 物联网终端设备由传感器、外部传感接口、CPU和外部通讯组成,工作原理是通过外部传感接口与传感设备连接&a…

和平精英军需精打细算天花板,330拿下一整套军需

和平精英军需精打细算天花板,330拿下一整套军需! #和平精英 #这游戏不花钱 #游戏凡星计划 军需精打细算天花板,一个月时间花 110 块获得 436 个军需币。拿个新军需的副套问题不大。要知道和平小店的暖弄大礼包, 100 左右&#…

一次在 classpath 使用通配符导致的偶发问题排查与建议

说起 Classpath,使用 Java 的同学应该都不会陌生。不过,目前的项目基本都会使用 Maven 等构建工具管理,开发过程中也会使用高度智能化的 IDE,在日常使用中直接涉及 Classpath 操作可能不多。前段时间遇到一个跟 Classpath 相关的偶…

【My Electronic Notes系列——触发器】

目录 序言: 🏆🏆人生在世,成功并非易事,他需要破茧而出的决心,他需要永不放弃的信念,他需要水滴石穿的坚持,他需要自强不息的勇气,他需要无畏无惧的凛然。要想成功&…

【栈】单调栈详情介绍及其运用

单调栈单调栈的概述(Overview)何时使用单调栈模拟单调递增栈单调栈的运用(算法练习题)模板【练习一、单调栈】739. 每日温度【练习二、单调栈哈希表】496. 下一个更大元素 I【练习三、单调栈循环数组】503. 下一个更大元素 II【练…

Word处理控件Aspose.Words功能演示:使用 C++ 处理 Word 文档中的目录

Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像/多媒体格式。 Aspose.words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和…

4EVERLAND IPFS CID部署,一键部署Uniswap

近日,4EVERLAND推出IPFS CID部署,开发者可以复制IPFS CID,一键部署到4EVERLAND。 一键部署,无需通过Github Repo,只需要知道CID即可。一键跨平台部署项目到 Arweave 或 ICP。了解IPFS CID,通过4EVERLAND绑…

漫谈广告机制设计 | 开篇语

很久没有写文章了,oCPC实践录的专栏还没有写完,我就换工作了,去了M公司,做的内容与oCPC不怎么相关,对于其中的问题思考也没有那么多了,好在专栏的核心思想已经基本阐明了。在M公司也已经快两年了&#xff0…

青龙+WxPusher实现资产推送

1.首先注册WXpusher: https://wxpusher.zjiecode.com/admin/login 扫码注册创建应用 确定完就会出现一个token,一定先复制保存起来,因为只显示一次,没存后期就只能重置了。 关闭后,这个页面有二维码和链接&#xff0…

CSS定位详解

文章目录定位为什么要使用定位定位的组成定位模式静态定位:按照标准流特性摆放,没有边偏移相对定位:元素在移动位置的时候,是相对于它原来的位置来说的绝对定位:在移动位置的时候相对与祖先元素固定定位:元…

C语言:指针详解

往期文章 C语言:初识C语言C语言:分支语句和循环语句C语言:函数C语言:数组C语言:操作符详解 目录往期文章前言1. 指针是什么2. 指针和指针类型3. 野指针4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算5. 二…

“小灵通”的风雨往事

最近,有一部叫做《狂飙》的国产电视剧火遍全网,相信大家都看到了。在剧中,出现了一个通信名词,不知道在座各位有没有关注到。没错,这个名词,就是“小灵通”。《狂飙》剧的主角高启强,原本是个卖…