volatile关键字

Volatile是Java虚拟机提供的轻量级的同步机制(三大特性)

  • 保证可见性
  • 不保证原子性
  • 禁止指令重排(有序性)

 

写屏障会确保指令重排时,不会将写屏障之前的代码排在写屏障之后

读屏障会确保指令重排时,不会将读屏障之后的代码排在读屏障之前

 

java内存模型中的两大模型是啥?

  • 主内存
    • java堆中对象实例数据部分
    • 对应于物理硬件的内存
  • 工作内存
    • java栈中的部分区域
    • 优先存储于寄存器和高速缓存

内存模型的三大特性

  • 可见性:(当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改)
  • 原子性:(一个操作或一系列操作是不可分割的,要么同时成功,要么同时失败)
  • 有序性:(变量赋值操作的顺序与程序代码中的执行顺序一致)

volatile和synchronzied的区别

  • volatile只能修饰实例变量和类变量,synchronized可以修饰方法和代码块。
  • volatile不保证原子性,而synchronized保证原子性
  • volatile 不会造成阻塞,而synchronized可能会造成阻塞
  • volatile 轻量级锁,synchronized重量级锁
  • volatile 和synchronized都保证了可见性和有序性
posted @ 2020-08-31 14:31  东邪黄药师  阅读(110)  评论(0编辑  收藏  举报