Volatile是Java虚拟机提供的轻量级
的同步机制(三大特性)
- 保证可见性
- 不保证原子性
- 禁止指令重排
java内存模型中的两大模型是啥?
- 主内存
- java堆中对象实例数据部分
- 对应于物理硬件的内存
- 工作内存
- java栈中的部分区域
- 优先存储于寄存器和高速缓存
内存模型的三大特性
- 可见性:(当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改)
- 原子性:(一个操作或一系列操作是不可分割的,要么同时成功,要么同时失败)
- 有序性:(变量赋值操作的顺序与程序代码中的执行顺序一致)
volatile和synchronzied的区别
- volatile只能修饰实例变量和类变量,synchronized可以修饰方法和代码块。
- volatile不保证原子性,而synchronized保证原子性
- volatile 不会造成阻塞,而synchronized可能会造成阻塞
- volatile 轻量级锁,synchronized重量级锁
- volatile 和synchronized都保证了可见性和有序性