Volatile关键字实现原理

Volatile关键字的作用?

  让其他线程能够马上感知到某一线程对某个变量的修改。

  1)保证可见性,对共享变量的修改,其他线程马上能感知到,但不能保证原子性。

  2)保证有序性,在JVM的编译阶段和指令优化排序阶段,对于volatile修饰的变量,其代码顺序不会改变。

Volatile和Synchronized的区别?

  (1)使用上的区别

    Volatile只能修饰变量,synchronized只能修饰方法和语句块

  (2)对原子性的保证

    synchronized可以保证原子性,Volatile不能保证原子性

  (3)对可见性的保证

    都可以保证可见性,但实现原理不同

    Volatile对变量加了lock,synchronized使用monitorEnter和monitorexit  monitor  JVM

  (4)对有序性的保证

    Volatile能保证有序,synchronized可以保证有序性,但是代价(重量级)并发退化到串行

  (5)其他

    synchronized引起阻塞

    Volatile不会引起阻塞

volatile的使用:

复制代码
 1 public class VolitaleDemo01 {
 2 
 3     final static int MAX = 5;
 4     //static int init_value = 0;如果不加volatile,不能保证更新完后读数据
 5     static volatile int init_value = 0;
 6     
 7     public static void main(String[] args) {
 8         new Thread(()->{
 9             int localValue = init_value;
10             while(localValue<MAX){
11                 if(localValue!=init_value){
12                     System.out.println("Reader:"+init_value);
13                     localValue = init_value;
14                 }
15             }
16         },"Reader").start();
17         new Thread(()->{
18             int localValue = init_value;
19             while(localValue<MAX){
20                 System.out.println("Updater:"+(++localValue));
21                 init_value = localValue;
22                 try {
23                     TimeUnit.SECONDS.sleep(2);
24                 } catch (InterruptedException e) {
25                     // TODO Auto-generated catch block
26                     e.printStackTrace();
27                 }
28             }
29         },"Updater").start();
30     }
31 
32 }
复制代码

 

posted @   WK_BlogYard  阅读(143)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示