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可能没有完成初始化 
