彻底弄明白之java多线程中的volatile
来源:互联网 发布:dubstep软件怎么用 编辑:程序博客网 时间:2024/05/22 13:40
转载:http://www.cnblogs.com/yakun/p/3589437.html
一. 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 并不完全是线程安全的.
0 0
- 彻底弄明白之java多线程中的volatile
- 彻底弄明白之java多线程中的volatile
- 彻底弄明白之java多线程中的volatile
- 彻底弄明白之java多线程中的volatile
- 彻底弄明白之java多线程中的volatile
- 彻底弄明白之java多线程中的volatile
- 彻底明白Java的多线程
- java多线程中的volatile
- Java多线程中的volatile
- 彻底明白 Java 语言中的IO系统
- 彻底明白 Java 语言中的IO系统
- 彻底明白+Java+语言中的IO系统
- 彻底明白 Java 语言中的IO系统
- 彻底明白Java语言中的IO系统
- 彻底明白Java语言中的IO系统
- 彻底明白 Java 语言中的IO系统
- 彻底明白 Java 语言中的IO系统
- 彻底明白 Java 语言中的IO系统
- 设计模式学习--代理模式
- 单链表逆转
- bzoj1845【CQOI2005】三角形面积并
- 文件复制
- VS2013 cuda7.5 配置
- 彻底弄明白之java多线程中的volatile
- 复制文本文件
- 关于opencv从图中画圈的思考
- ubuntu安装vim时提示 没有可用的软件包 vim,但是它被其它的软件包引用了 解决办法
- 装系统问题,BIOS显示不出硬盘解决方案
- poj--2823 Sliding Window(单调队列)
- python基础学习01
- Linux c 数组大小的限制
- 控制台输出的内容复制到txt文件