【文件属性】:
文件名称:java多线程安全性基础介绍.pptx
文件大小:1.09MB
文件格式:PPTX
更新时间:2022-08-14 08:23:38
java 多线程安全性
java多线程安全性基础介绍
线程安全
正确性
什么是线程安全性
原子性
竞态条件
i++
读i
++
值写回i
可见性
JMM
由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。
各线程之间变量不可见,线程通信通过共享主内存实现。
volatile
仅保证可见性
作用
不会被缓存在寄存器或其他对cpu不可见的地方
强制其他线程读主内存
编译器和运行时不会讲该变量的操作与其他内存操作一起重排序
锁不仅保证原子性还保证可见性
有序性
多个线程操作共享对象导致的状态不一致问题
原因
共享资源的竞态条件问题
问题
竞态条件
指令重排序
工作内存中主内存同步延迟
解决
要有安全策略文档或注释
不共享
线程封闭
仅在单线程内访问数据
栈封闭
局部变量
threadLocal
为每个线程保存一个副本
类似于一个以线程id为key的map
不可变对象状态
final
关键共享资源上互斥,变并发为串行即同步
锁
分类
显示锁
Lock
Lock是个接口
实现类
ReentrantLock
可重入锁
ReentrantReadWriteLock.ReadLock
ReentrantReadWriteLock.WriteLock
隐式锁(内置锁)
Synchronized
问题
死锁
性能
线程活跃与线程饥饿
同步工具类
原子操作类
AtomicInteger等
相当于加上synchronized
也有些利用硬件底层能力CAS