微信8.0状态 楚门的世界(无水印自取)
2.5问题总结
volatile是什么
是java虚拟机提供的轻量级 同步机制
三大特性
1.保证可见性
2.不保证原子性
3.禁止指令重排
JMM内存模型值可见性
jmm概述
特性
1.可见性
2.原子性
3.volatile代码实现可见性+原子性
4.有序性
可见性代码说明
volatile不保证原子性
指令重排
所谓指令重排就是 你写的是123456789
但是源码在走的时候 可能会1423415
类似高考 监考老师会说先把会做的做了 一个道理
正常情况下 1234
多线程下结果不一样
底层重排后 2134
1324 以此类推
语句四不可以成为第一条的 有些虎子就问为什么呢
处理器在进行重排序的时候必须要考虑奥指令之间的数据依赖性啊 虎子
y 没有先声明 啊
第二个案例
你在哪里用volatile ?
单例模式在多线程的环境下可能存在存在问题
1.单例模式(单机版的单例模式)
懒汉 饿汉模式
结果
并发多线程后。情况发生了变化
多线程访问main方法
十个线程打印出五个东东
单机版这样解决 锁
2.读写锁 缓存
3.cas看底层分析 ouc大规模使用到了volatile
微信8.0状态 楚门的世界(无水印自取)