打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
彻底弄明白之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}

 

从这个角度说 volatile 并不完全是线程安全的.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【死磕Java并发】—–Java内存模型之分析volatile
Java并发编程学习笔记 深入理解volatile关键字的作用
java线程安全总结
《Head First设计模式》阅读笔记.第五章
java Singleton 几种方式解析
JAVA多线程之volatile 与 synchronized 的比较
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服