为什么我们必须使用相同的volatile字段来使用volatile关键字建立before-before关系?

时间:2017-10-26 02:42:33

标签: java multithreading concurrency

'Volatile Rule'表示'在每次后续读取相同字段之前发生对易失性字段的写入', 我知道这意味着如果我们写一个易失性线程并在另一个线程中读取另一个volatile,那么在两个动作之间没有发生 - 之前的关系。

我的问题是为什么我们必须使用'同一领域'?

2 个答案:

答案 0 :(得分:1)

它应该如何工作不是吗?我们想要的只是线程之间共享的数据应该是一致的,那么我们为什么要在不同变量之间发生关系?在相同领域的关系之前发生是有道理的,因为如果我们不这样做,那么它可能会导致数据竞争。 ISN'?吨

答案 1 :(得分:0)

因为您要求的内容由var clickEvtHandler = false, i = 1; $("button").on("click", function() { clickEvtHandler = true; }); $("div").on("click", function() { if (!clickEvtHandler) return; $(this).append(i++); clickEvtHandler = false; }); 涵盖:通过同步方法写入对象的任何字段之后发生,随后通过同步读取同一对象的任何其他字段方法。