【发布时间】:2016-02-12 03:29:48
【问题描述】:
我知道有很多关于 volatile 的问题,但我只是从这个讨论中感到困惑: Java: how volatile guarantee visibility of "data" in this piece of code?
我阅读的每个网站都说可以将变量存储在缓存中(使该值对其他线程不可见)我什至发现了这个示例https://dzone.com/articles/java-volatile-keyword-0
所以我的第一个问题是:Java 是否将变量值存储在缓存中(其中一个?l1 l2 或 l3)
我的另一个问题是可见性部分。例如:
public int num1 = 1;
public int num2 = 2;
public int num3 = 3;
public int num4 = 4;
public int num5 = 5;
...
num1 = 10;
num2 = 20;
num3 = 30;
num4 = 40;
num5 = 50;
在这个例子中,变量的执行顺序是没有保证的。 如果我使 num2 易变,它可以向我保证 num1、num2 和 num3 的订单执行将与其定义的完全一样,但它不能向我保证 num4 和 num5 ?
编辑 我刚读完彼得劳里的文章 http://vanillajava.blogspot.com.es/2012/01/demonstrating-when-volatile-is-required.html 他写道:“如果没有 volatile,这会以多种可能的方式发生故障。一种方式是两个线程都认为它们已经更改了值并正在等待另一个,即 每个线程都有自己的缓存值副本. "
所以我更困惑..关于那个
对不起,这个问题可能很愚蠢,但我真的很困惑。
【问题讨论】:
标签: java multithreading thread-safety