Java多线程知识点总结(思维导图+源码笔记)

2023-11-18

转自:https://blog.csdn.net/yelvgou9995/article/details/107408709

 

多线程大家在初学的时候,对这个知识点应该有不少的疑惑的。我认为主要原因有两个:

  • 多线程在初学的时候不太好学,并且一般写项目的时候也很少用得上(至少在初学阶段时写的项目基本不需要自己创建线程)。
  • 多线程的知识点在面试经常考,多线程所涉及的知识点非常多,难度也不低。

这就会给人带来一种感觉「这破玩意涉及的东西是真的广,平时也不怎么用,怎么面试就偏偏爱问这个鬼东西

不多BB,我要开始了。

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

多线程知识重要吗?

我们日常「关于多线程的代码」写得不多,但是我们写的程序代码的的确确是在多线程的环境下跑的。

如果我们不懂多线程知识,很直接的一个现实:

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

从开头的思维导图里我们可以发现多线程的知识点还是很多的,我们起码得知道:

  • 线程和进程的区别
  • Thead类的常见方法
  • 可以用什么手段来解决线程安全性问题
  • Synchronized和Lock锁的区别
  • 什么是AQS、ReentrantLock和ReentrantReadWriteLock锁
  • JDK自带的线程池有哪几个,线程池的构造方法重要的参数
  • 什么是死锁,怎么避免死锁
  • CountDownLatch、CyclicBarrier、Semaphore是什么?
  • Atomic包下的常见子类,什么是CAS,CAS会有什么问题
  • ThreadLocal是什么?
  • …..//

虽然在工作中未必会全部用得上,但如果项目真的用到了,我们如果学过了可能就可以很快地理解当时为什么要这样设计(我觉得去挖掘过程还是挺有意思的)。

我可能不用,但你必须要有

这个道理也很容易懂:「我买电脑的时候,虽然我是木耳听不出什么音质出来,但你音质就是得好」。企业招人的时候也一样「你在工作的时候未必要写,但你必须要会

至少在我看来,从求职的角度出发,多线程是很重要的。之前我还整理过在我当时校招经常被问到的多线程面试题目:

  1. 多线程了解多少啊?使用多线程会有什么问题?你是怎么理解“线程安全”的?
  2. 如果我现在想要某个操作等待线程结束之后才执行,有什么方法可以实现?为什么要用CountDownLatch?CountDownLatch的底层是什么?(引出AQS)
  3. synchronized关键字来说一下,它的用途是什么?synchronized底层的原理是什么?
  4. 线程安全的容器有哪些?(着重于ConcurrentHashMap、CopyWriteOnArrayList与其他非线程安全容器的区别以及它们的具体实现)
  5. ThreadLocal你了解过吗?主要是用来干什么的?具体的源码实现原理来说一下吧
  6. 产生死锁的条件是什么?我们可以如何避免死锁?(可延伸到操作系统层面上的死锁)
  7. synchronized锁和ReentrantLock锁有什么区别呀?
  8. 线程池你应该也看过吧,来说说为什么要用线程池。JDK默认实现了几个线程池,分别有xxx(自然地ThreadPoolExecutor构造函数的常用几个参数你也得一起说出来)

转发+关注,然后私信回复关键字 “笔记” 即可获得《Java多线程知识点总结》PDF文档资料的免费领取方式!

一、什么是多线程

初识多线程

  • 1.1介绍进程
  • 1.2回到线程
  • 1.3进程与线程
  • 1.4并行与并发
  • 1.5Java实现多线程
  • 1.6Java实现多线程需要注意的细节

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

二、Thread类解析

Thread线程类API

  • 1.2守护线程
  • 1.3优先级线程
  • 1.4线程生命周期

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

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

  • 1、使用多线程遇到的问题
  • 2、对象的发布与逸出
  • 3、解决多线程遇到的问题
  • 4、多线程需要注意的事 -总结

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

四、synchronized锁和lock锁

  • 1、synchronized锁
  • 2、Lock显式锁
  • 3、Java锁简单总结

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

五、AQS

  • 1、AQS是什么?
  • 2、简单看看AQS

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

六、ReentrantLock和ReentrantReadWriteLock

  • 1、ReentrantLock锁
  • 2、ReentrantReadWriteLock
  • 3、最后

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

七、线程池

  • 1、线程池简介
  • 2、JDK提供的线程池API
  • 3、ThreadPoolExecutor详解
  • 4、execute执行方法
  • 5、线程池关闭

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

八、死锁

  • 1、死锁讲解
  • 2、避免死锁的方法
  • 3、死锁总结

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

九、线程常用的工具类

  • 1、CountDownLatch
  • 2、CyclicBarrier
  • 3、Semaphore
  • 4、总结

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

十、Atomic

  • 1、基础铺垫
  • 2、原子变量类简单介绍

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

十一、ThreadLocal

  • 1、什么是ThreadLocal
  • 2、为什么要学习ThreadLocal?
  • 3、ThreadLocal实现的原理
  • 4、避免内存泄露
  • 5、总结

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

 

放干货

PDF的内容非常非常长,干货非常非常的硬,有兴趣的读者可以浏览一波。共有「129」页

转发+关注,然后私信回复关键字 “笔记”即可获得《Java多线程知识点总结》PDF文档资料的免费领取方式!

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java多线程知识点总结(思维导图+源码笔记) 的相关文章

  • DBA思考方式感悟

    author skate time 2012 07 21 DBA思考方式感悟 某某牛人为什么能想到那么绝妙的方法 某某人为什么那么聪明 这样的话大家都听过 有时想想大家先天素质都差不多 那就是后天人家爱思考 知道如何思考 于是聊聊如何让自己
  • 注意力机制Attention详解

    注意力机制Attention详解 一 前言 2018年谷歌提出的NLP语言模型Bert一提出 便在NLP领域引起热议 之所以Bert模型能够火出圈 是由于Bert模型在NLP的多项任务中取得了之前所有模型都不能达到的出色效果 那么Bert模
  • upload-labs通关(Pass-11~Pass-15)

    目录 Pass 11 Pass 12 Pass 13 Pass 14 Pass 15 Pass 11 什么鬼 我都做好了上传不成功的准备 结果sh php居然上传成功了 一看Response报文 果然事情没有这么简单 后端自动把文件名中的p
  • JS基础知识-ECMAScript

    目录 1 1 基本语法 1 2 基本对象 JavaScript 概念 一门客户端脚本语言 运行在客户端浏览器种 每一个浏览器都有JavaScript的解析引擎 脚本语言 不需要编译 直接就可以被浏览器解析执行了 功能 可以来增强用户和htm
  • AF_INET和PF_INET的区别

    在写网络程序的时候 建立TCP socket一般是这样的 sock socket PF INET SOCK STREAM 0 然后在绑定本地地址或连接远程地址时需要初始化sockaddr in结构 其中指定address family时一般
  • MeterSphere对接禅道及LDAP

    一 禅道集成 基础配置 使用指引 1 账号密码为具有相应权限的Zentao账号 账号需要具有 超级model调用接口权限 2 保存 Basic Auth 账号信息后 需要在 MeterSphere 项目中手动关联 ID key 和缺陷模板
  • 解决selenium传入cookies错误:InvalidCookieDomainException: Message: Cookies may only be set for the curre

    这是因为cookies的domain不同造成的 去掉含有多余domain的cookie 不再报错 def getPureDomainCookies cookies domain2cookie 做一个域到cookie的映射 for cooki
  • 戳泡泡小游戏

    欢迎来到程序小院 戳泡泡 玩法 鼠标点击上升的起泡泡 点击暴躁记录分数 不要让泡泡越过屏幕 共有三次复活生命 会有随机星星出现 点击即可暴躁全屏哦 开始游戏https www ormcc com play gameStart 179 htm
  • MPLS-LDP

    在 MPLS 网络中 路由器通过运行 LDP 协议为每条内部路由映射 一个标签 然后再将标签信息通告给所有邻居 路由器之间通过这种方式来建立标签转发表 最终形成LSP 当网络拓扑发生变化时 LDP 会实时地响应这种变化 动态建立 LSP 实
  • XP系统IE浏览器无法访问https

    报错信息如下 百度后发现是tls的问题 查看相关信息 查看证书的信息 F12 Security not serure 老版本xp只有TLS1 0而证书是TLS1 2 一 尝试使用老版本Openssl创建证书 Openssl老版本下载 htt
  • 005. 反转链表-双指针

    题目链接 力扣 代码 01 双指针 class Solution public ListNode reverseList ListNode head ListNode temp 保存cur的下一个节点 ListNode cur head L
  • make[1]: *** [objs/Makefile:777:objs/src/os/unix/ngx_user.o] 错误 1

    在安装nginx 执行make时报以下错误 解决方法如下图 保存后再返回nginx目录下再执行make即可 如make后还报一样的错或其他错需再执行以下命令 在nginx目录下编辑vim src os unix ngx user c 如图
  • 数组与指针超强巩固练习题——搞清各种数组与指针的关系

    1 一维数组 include
  • faster rcnn matlab,Faster rcnn 模型的数据标定的知识求助,matlab2017b自带的函数

    构建CNN网络 输入层 最小检测对象设置为540 960 inputLayer imageInputLayer 10 10 3 中间层 定义卷基层参数 filterSize 3 3 numFilters 32 middleLayers 第一
  • linux驱动:一、字符设备的介绍和demo

    一 字符设备驱动简介 字符设备是 Linux 驱动中最基本的一类设备驱动 字符设备就是一个一个字节 按照字节流进行读写操作的设备 读写数据是分先后顺序的 比如我们最常见的点灯 按键 IIC SPI LCD 等等都是字符设备 这些设备的驱动就
  • 如何清空matlab命令窗口,matlab如何清空命令窗口中的内容

    还有一个常用的clf 清除图形窗口命令www mh456 com防采集 在matlab的命令窗口 输入2113clc命令 即可清空命令窗5261口中的内容 从matlab2012b版本后 还可以4102利用HOME菜单页下的Clear Co
  • MS17-010(永恒之蓝)漏洞复现和分析

    MS17 010 永恒之蓝 漏洞复现和分析 一 漏洞简介 1 永恒之蓝介绍 永恒之蓝是指2017年4月14日晚 黑客团体Shadow Brokers 影子经纪人 公布一大批网络攻击工具 其中包含 永恒之蓝 工具 永恒之蓝 利用Windows
  • PTA天梯赛L1-058 6翻了(c语言实现)

    原题链接 这道题稍微有一点点灵活 乍一想还是有点想不到的 主要还是对6的个数进行计数 如果是6则计数有多少个6 如果不是6的话则要进行判断 如果在此之前6的个数超过了3 gt 3 但是小于等于9那么要输出9 如果在此之前6的个数超过了9 g
  • ctfshow---sql注入(214-253)

    目录 web214 web215 web216 web217 web218 web219 web220 web221 web222 web223 web224 web225 web226 web227 web228 229 230 web2

随机推荐

  • 解决git速度慢的问题

    git clone特别慢是因为github global ssl fastly net域名被限制了 只要找到这个域名对应的ip地址 然后在hosts文件中加上ip gt 域名的映射 刷新DNS缓存便可 github com的ip 打开hos
  • 【Linux实操】vi和vim编辑器的使用(vim三种模式的切换)

    vim三种模式介绍及切换 一 Linux实操vi和vim编辑器的使用 1 正常模式 2 插入模式 编辑模式 3 命令行模式 二 vim的三种模式的相互转换 三 vi vim快捷键一览图 一 Linux实操vi和vim编辑器的使用 所有的 L
  • 获取剪贴板内容

  • MySQL命令alter add:增加表的字段

    alter add命令用来增加表的字段 alter add命令格式 alter table 表名 add字段 类型 其他 例如 在表MyClass中添加了一个字段passtest 类型为int 4 默认值为0 mysql gt alter
  • centos通过rpm包实现内核升级

    一 查看当前内核版本 root lvs uname r 3 10 0 1160 el7 x86 64 二 前往链接 elrepo获取最新的repo包 rpm import https www elrepo org RPM GPG KEY e
  • 高安全等级密码模块安全技术设计

    摘 要 随着金融 大数据等行业的普及和发展 对密码设备的依赖与日俱增 并且业内在数据安全领域提出了多方面更高的要求 例如密码模块的物理安全 抗非入侵式攻击 抗环境失效等 迫切需要更高安全等级的密码模块来支撑行业的实际应用需求 依托安全二级密
  • 【Linux命令—shell】正则表达式

    正则表达式 regular expression 描述一个字符集合的表达方式 模糊匹配 目录 1 基本正则 2 扩展正则 3 兼容的正则 perl 4 综合案例练习 1 基本正则 演示如下 2 扩展正则 注意 grep不支持扩展正则 如果需
  • Python中os.listdir和os.walk的区别

    os listdir和os walk都是获取指定目录下的文件内容 两者有一定的区别 现在举例说明 如下图所示目录结构 os walk import os def file name file site for root dirs files
  • pandas学习笔记(一)---创建dataframe的4种常用方式

    一 使用numpy创建 import pandas as pd import numpy as np df pd DataFrame np arange 16 reshape 4 4 index list abcd columns one
  • 【Python学习笔记】Python中的heapq

    Python中的heapq 1 基本介绍 堆是非线性的树形的数据结构 有两种堆 大根堆与小根堆 大根堆 树中各个父节点的值总是大于或等于任何一个子节点的值 小根堆 树中各个父节点的值总是小于或等于任何一个子节点的值 我们一般使用二叉堆来实现
  • python稳定版本是哪些_python3哪个版本稳定_后端开发

    C语言中关系表达式和逻辑表达式的值是什么 后端开发 关系表达式和逻辑表达式的值是布尔型 分别为真 true 或假 false 即0或1 但c语言没有布尔类型 以0为假 非0即真 python3哪个版本稳定 python3中3 4比较稳定 基
  • android状态栏(沉浸式状态栏,改变状态栏字体颜色,背景颜色)

    通过主题设置状态栏 在API21 android 5 0 之后 设置状态栏透明效果为半透明 并且为了保证在API19 android 4 4 正常使用 所以需要3份不同的style文件 即values v19 android 4 4之后使用
  • ajax请求,进行ajax处理后端特殊字符串

    前端传入officeId的值 将office对应ip地址传入到 function getinipaddress var officeId document getElementById officeId value var isinheri
  • Linux学习第16天:Linux设备树下的LED驱动开发:举一反三 专注专心专业

    Linux版本号4 1 15 芯片I MX6ULL 大叔学Linux 品人间百味 思文短情长 在开题之前 先说一下这次的题目 尤其是后面的 举一反三 专注专心专业 到底想给大家传递什么信息 LED驱动开发 目前为止已经学了好几种方法 包括裸
  • python实现常用数据结构

    本文基于Python实现以下几种常用的数据结构 栈 队列 优先队列 二叉树 单链表 双向链表 栈 基于List实现 class Stack 栈 def init self self arr self size 0 def push self
  • windows 10自带命令查看文件的哈希值

    windows的powershell自带了查看文件哈希值的命令 Get FileHash 文件名 Algorithm MD5 SHA1 SHA256 案例 查看文件的MD5值 查看文件的SHA1值 查看文件的SHA256值
  • springboot调整请求头大小_SpringBoot http post请求数据大小设置操作

    背景 使用http post请求方式的接口 使用request getParameter XXX 的方法获取参数的值 当数据量超过几百k的时候 接口接收不到数据或者接收为null RequestMapping value rcv metho
  • GitHub Flavored Markdown 规范

    Markdown是一种轻量级标记语言 它以纯文本形式编写文档 易读 看起来舒服 易写 语法简单 易更改 并最终以HTML格式发布 由于markdown没有明确指定语法 随着编译器不一样 实现方式有很大差异 GitHub Flavored M
  • SocketOutputStream和SocketChannel write方法的区别和底层实现

    Java直接内存原理提到了SocketChannel write的实现原理 通过IOUtil write将java堆内存拷贝到了直接内存 然后再把地址传给了I O函数 那么 BIO 是怎么实现往socket里面写数据的呢 BIO Socke
  • Java多线程知识点总结(思维导图+源码笔记)

    转自 https blog csdn net yelvgou9995 article details 107408709 多线程大家在初学的时候 对这个知识点应该有不少的疑惑的 我认为主要原因有两个 多线程在初学的时候不太好学 并且一般写项