超详细的多线程知识点整理(带图)
2021-10-22 14:02:37 76 举报
AI智能生成
登录查看完整内容
超详细的多线程知识点整理(带图),一图了解多线程并发知识点
作者其他创作
大纲/内容
地址寄存器
指令寄存器
指令计数器
控制单元
算术运算
逻辑运算
运算单元
L1 Cache
L2 Cache
L3 Cache
缓存行
CPU缓存结构
寄存器
存储器存储空间大小
存储器读取速度快慢
CPU读取存储器数据过程
时间局部性
空间局部性
局部性原理
存储单元
内部结构
ring0 内核态
ring1
ring2
ring3 用户态
CPU运行安全等级
CPU
用户空间
内核空间
内核线程模型(KLT)
用户线程模型(ULT)
操作系统内存管理
进程
串行
并行
并发
线程
线程的上下文切换
进程与线程
并发计算机相关知识
主内存
工作内存
实例对象中的成员方法
实例对象的成员变量
存储位置
lock(锁定)
unlock(解锁)
read(读取)
load(载入)
use(使用)
assign(赋值)
store(存储)
write(写入)
数据同步八大原子操作
线程读取共享变量并操作的过程
原子性
可见性
有序性
并发三大特性
数据依赖性
影响
volatile
指令重排
定义
程序顺序原则
锁规则
volatile规则
线程启动规则
线程终止规则
线程中断规则
传递性
对象终结规则
规则
happens-before
as-if-serial
两个规则
保证可见性
保证即时性
禁止指令重排优化
作用
内存屏障
内存语义的实现
volatile禁止重排优化的实现
M 修改(Modified)
E 独享、互斥(Exclusive)
S 共享 (Shared)
I 无效 (Invalid)
MESI 协议状态切换过程
MESI优化及其带来的问题
MESI缓存一致性协议
总线锁
如何保证内部缓存数据的一致性
JAVA代码的执行流程图
JAVA内存模型
Monitor(监视器锁)
WaitSet
EntryList
Owner
Minitor结构
wait/notify原理
synchronized原理
对象头
实例数据
对齐填充
指针压缩
对象内存布局
同步实例方法
同步类方法
同步代码块
加锁方式
偏向锁
轻量级锁
重量级锁
自旋锁
锁粗化
锁消除
减少上锁时间
减少锁的粒度
读写分离
其他
优化
锁的升级膨胀过程
synchronized
什么是CAS?
偏移量
CAS 流程
底层实现
ABA问题解决方式
实例
ABA问题
自旋时间过长,开销会很大
只能保证一个共享变量的原子操作
缺陷
CAS
什么是 AQS?
阻塞等待队列
独占
共享
共享/独占
公平
非公平
公平/非公平
可重入
允许中断
AQS 特性
用途
AQS框架
实现的必要条件
公平性与非公平性实现
流程(底层原理图解)
ReentrantLock
锁
无限队列
有限队列
队列的类型
数据结构
应用场景
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
常见的阻塞队列
共同点
添加元素
检索元素
API
实现
线程获取锁的条件
使用场景
延迟队列 DelayQueue
生产者消费者模式
源码解析
阻塞队列 BlockingQueue
队列
定义及作用
常用API
使用实例
原理图解
Semaphore
开始执行前等待n个线程完成各自任务
实现最大的并行性
死锁检测
原理
CountDownLatch
模拟并发
多线程计算数据,最后合并计算结果
CyclicBarrier
Executors
并发工具类
自动保证
缓存锁定
处理器
循环 CAS
Java
原子操作的实现
AtomicInteger 为例部分部分API
源码分析
基本类
AtomicIntegerArray为例部分API
注意事项
数组类型
属性原子修改器(Updater)
AtomicStampedReference
引用类型
Atominc 原子包
原子操作
反射
getUnsafe()
获取Unsafe实例的方法
优化垃圾回收
提升程序I/O操作的性能
为什么要使用堆外内存
使用堆外内存注意事项
典型应用之DirectByteBuffer
内存操作
CAS相关操作
park/unpark线程阻塞唤醒
跨方法加锁
典型应用
线程调度
Unsafe 魔法类
不足
JDK1.8以前
链表转红黑树的条件
相较于JDK1.6的改进
JDK1.8
限制
默认容量
扩容
HashMap容量
单线程:TreeMap
多线程:跳表
HashMap保证有序性的扩展
数据丢失
死锁(JDK < 1.8)
多线程环境下的问题
HashMap
HashTable
Segment 数组
结构图
JDK < 1.8
相较于JDK1.7的优化
ConcurrentHashMap
核心思想
适用场景
特点
读写过程图解
CopyOnWrite
1111
并发集合
进程与线程的区别
临界区Critical Section
竞态条件Race Condition
临界区与竞态条件
实现Runnable接口
直接继承 Thread
FutureTask 配合 Thread
创建线程的几种方式
STATIC
非STATIC
过时的方法
sleep和yield的区别
sleep与wait的区别
Park与UnPark
常见方法
要点
join源码应用
设计模式保护性暂停
线程优先级
两阶段终止模式(取代Stop等过时方法)
如何正确终止线程
守护线程
初始状态
可运行(就绪)状态
运行状态
阻塞状态
结束状态
六种状态
生命状态
协程
为什么要用线程池
继承体系
重要API
Executor框架
RUNNING
SHUTDOWN
STOP
TIDYING
TERMINATED
五种状态
核心线程数
最大线程数
线程最大空闲时间
时间单位
等待(阻塞)队列
创建线程的工厂
AbortPolicy
CallerRunsPolicy
DiscardOldestPolicy
DiscardPolicy
自定义策略
拒绝策略
七大参数
线程池监控方法
CPU 密集型
I/O密集型
参数设置(参考)
工作流程
线程池工作生命周期
阻塞队列的作用
为什么先添加阻塞队列而不是先创建最大线程
一段话总结线程池原理
线程池
Timer
类关系
结构
schedule
scheduledAtFixedRate
scheduledWithFixedDelay
任务的提交
工作线程的执行过程
定时任务线程池
使用实例及结果分析
结构及关系
内存泄漏问题
注意点
ThreadLocal
Callable
CPU(计算)密集场景
大数据量处理
远程方法调用
常用场景
使用实例及注释
Future
JDK1.8 版本的类
创建异步对象
计算结果完成后的回调方法
线程串行化方法
合并两个任务 - 两个任务都要完成
合并两个任务 - 两个任务完成一个
合并多个任务
任务合并
Future继承过来的方法
API及使用方法
异步编排
Future/Promise 异步编程模式
CompletableFuture
核心思想:分治
使用
ForkJoin
设计原理
等待策略
写数据流程
Disruptor
多线程并发编程
0 条评论
回复 删除
下一页