DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java开发

java多线程中的volatile

一. volatite 简述

Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的.

 

二. volatite 线程安全?

volatile 变量对所有线程是立即可见的,对 volatile 变量所有的写操作都能立即反应到

其他线程之中,换句话说:volatile 变量在各个线程中是一致的,所以基于 volatile 变量的运算是线程安全的.  

这句话论据貌似没有错,论点确实错的.

 

 

三. volatite 为什么是线程不安全的?

 
  
public class VolatileTest{ public static volatile int i; public static void increase(){
        i++;
    }
}

  

javap -c -l VolatileTest.class 

  

public class VolatileTest { public static volatile int i; public VolatileTest();
    Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return LineNumberTable:
      line 1: 0 public static void increase();
    Code: 0: getstatic     #2 // Field i:I, 把i的值取到了操作栈顶,volatile保证了i值此时是正确的.  3: iconst_1 4: iadd // increase,但其他线程此时可能已经把i值加大了好多 5: putstatic     #2 // Field i:I ,把这个已经out of date的i值同步回主内存中,i值被破坏了. 8: return LineNumberTable:
      line 6: 0 line 7: 8 }

 

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号