易变变量语义

时间:2018-03-22 11:52:06

标签: java volatile

关于不长的双重

的volatile变量,我有几个问题

1.当我们编写和阅读时有可能存在争用 - 例如 - 当我们读取一个volatile变量时,有人可以写一个新值而阅读线程不会得到更新的值吗?

2.可以写入2个写入线程的值,最后,其中一个将重叠另一个的结果,也可以同时读取多个线程的volatile,这意味着读取线程重叠并且所有读取都相同结果同时?

3.如果我们在1个volatile变量上启动5个读取和5个写入线程,那么读者的结果是不可预测的?

1 个答案:

答案 0 :(得分:2)

  1. 是。你不知道哪一个先发生,所以你的阅读主题会看到两个值中的一个。

  2. 如果你的意思是覆盖,当然。如果你有2次写入,那么最后一次获胜。如果你的意思是重叠,因为结果值成为两个写入的组合,那么没有。甚至没有longdouble

  3. 当然。除非您有例如volatile int foo = 0;并且所有作者都写0。然后,您确保所有读者都会看到0,否则这取决于日程安排和其他类似的事情。

  4. 您的所有问题看起来都希望volatile订单有关,但事实并非如此。它只保证可见性。如果您想订购,您必须自己强制执行。