Java内存模型背诵版
Java虚拟机规范中试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。
主内存与工作内存
Java内存模型的主要目标是定义程序中各个变量的访问规则
原子性synchrnized
synchronized 既保证了原子性又保证了可见性
可见性volatile
volatile修饰保证变量不同线程的可见性,强制读主存
有序性
volatile可禁用指令重排,DCL在多线程访问时会有问题.
CAS与原子类
CAS(synchronized效率低,要加锁解锁,线程切换,上下文切换)
乐观锁与悲观锁是一种思想:synchronized体现了悲观锁的思想,CAS + volatile体现了乐观锁的思想,并且可细线无锁并发
Java并发包下提供了一些原子类,底层实现用的CAS+volatile
synchronized优化
对象头重的Mark Word
偏向锁:thread-id(名字)
轻量级锁 :栈帧中的锁记录结构
重量级锁:Monitor
重量级锁自旋优化
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!