Java 可见性
Hyman 2020/12/8 笔记Java
volatile:Java虚拟机提供轻量级同步机制
保证可见性
JMM(Java内存模式):抽象的概念,并不存在,描述的是一种规则和规范。规范:可见性、原子性、有序性
硬盘 < 内存 < CPU
主内存就是共享内存,线程工作内存,工作内存修改其他工作内存也可以看见,传值需要通过主内存,不能直接工作内存写入另外一个工作内存。修改第一时间通知其他线程就是内存可见性。
不保证原子性
number++,分为把变量拷贝到工作内存,然后再操作,操作完拷贝到主内存。
禁止指令重排序
源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行的指令
单线程结果一致。多线程数据依赖性。
Memory Barrier内存屏障(store指令,load指令),禁止指令重排序优化,强制刷出各种CPU的缓存数据
单例模式
DCL(Double check lock)
public static SingletomDemo() { if instance == null{ synchronized (SingleonDemo.class){ if (instance == null){ installce = new SingleonDemo(); } } } return instance }
1
2
3
4
5
6
7
8
9
10问题:变为null,instance可能没有完成初始化