并发编程1
2020-11-10 18:38:03 0 举报
AI智能生成
并发基础
作者其他创作
大纲/内容
并发优点
充分利用多CPU的计算能力
方便进行业务拆分,提升应用性能
并发问题
高并发下,导致上下文的频繁切换
临界区线程安全问题,容易出现死锁,导致系统不可用
JMM
八种操作
lock
unlock
read
load
use
assign
store
write
同步规则
原子性
可见性
有序性
happens-before 原则
volatile
可见性
禁止指令重排
无法保证原子性
缓存一致性协议
Tools
CountDownLatch
CyclicBarrier
Exchanger
BlockingQueue
ArrayBlockingQueue 由数组支持的有界队列
LinkedBlockingQueue 由链接节点支持的可选有界队列
PriorityBlockingQueue 由优先级堆支持的无界优先级队列
DelayQueue 由优先级堆支持的、基于时间的调度队列
线程池
优势
实现方式
Runnable
Thread
Callable
Executors
分类
目的
分类
显示锁
ReentrantLock
隐式锁
Synchronized
线程是否锁住同步资源
锁住
悲观锁
不锁住
乐观锁
锁住同步资源失败,是否阻塞
阻塞
不阻塞
自旋锁
适应性自旋锁
多个线程竞争同步资源的流程细节有没有区别
不锁住资源,多个线程只有一个能修改资源成功,其他线程会重试
无锁
同一个线程执行同步资源时自动获取资源
偏向锁
多个线程竞争同步资源时,没有获取资源的线程自旋等待锁释放
轻量级锁
多个线程竞争同步资源时,没有获取资源的线程阻塞等待唤醒
重量级锁
多个线程竞争锁时是否要排队
排队
公平锁
先尝试插队,失败在排队
非公平锁
一个线程的多个流程能不能获取同一把锁
能
可重入锁
不能
非可重入锁
多个线程能不能共享一把锁
能
共享锁
不能
排它锁
线程生命状态
synchronized
使用
同步实例方法
锁是当前实例对象
同步类方法
锁是当前类对象
同步代码块
锁是括号里的对象
底层原理
实例对象内存中存储在哪?
锁的升级
无锁
偏向锁
轻量级锁
重量级锁
lock
ReentrantLock
ReentrantReadWriterlock
AQS
特性
阻塞等待队列
共享/独占
公平/非公平
可重入
允许中断
两种队列
同步等待队列
条件队列
对象内存结构
对象头
Mark Word
对象实际数据
对齐填充
原子性
总线锁
缓存锁
锁和循环CAS
Atomic
基本类
引用类型
数组类型
属性原子修改器
Unsafe
何获取Unsafe实例?
0 条评论
下一页