600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Java并发编程-volatile

Java并发编程-volatile

时间:2019-11-15 08:44:41

相关推荐

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

从这个角度说 volatile 并不完全是线程安全的,虽然volatile 变量在读取和保存的时候是原子的,但是自增和自减操作由多个操作合成,它不是一个原子操作。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。