volatile关键字的作用有哪些

  1. volatile被誉为 轻量级的synchronized,也是java编程中比较重要的一个关键字。
  2. 和synchronized不同,
  • volatilze是一个变量修饰符,只能用来修饰变量
  • 无法修饰方法及代码块。
  1. 被volatile修饰的共享变量,就具有了以下两点特性
  • 保证了不同线程对该变量操作的内存可见性。
  • 禁止指令重排序。

4. 保证可见性

  • 可见性指多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值
  • 实现原理
    • 当对volatile(易挥发的)变量进行读写的时候,每个线程先从主内存拷贝变量到cpu缓存中,
      如果计算机有多个cpu,每个线程可能在不同的CPU上被处理,意味着每个线程可以拷贝到不同的CPU cache中。
    • volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,保证了每次读写变量都从主内存中读,跳过CPU Cache这一步。
      当一个线程修改了这个变量的值,新值对于其他线程是立即得知的。

5. 禁止指令重排

  1. 指令重排是JVM为了优化指令、提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度。
  2. 指令重排序包括编译器重排序和运行时重排序;
  3. volatile变量禁止指令重排序,针对volatile修饰的变量,在读写操作指令前后
  • 会插入内存屏障,
  • 指令重排序时不能把后面的指令重排序到内存屏障。?
posted @ 2025-05-17 20:58  kuki'  阅读(25)  评论(0)    收藏  举报