Java指针写入是原子的吗?

简单的问题:Java内存/同步模型是否保证原子指针写入?也就是说,如果我们有竞争线程:

String shared;

thread1()
{
    shared = "a";
}

thread2()
{
    shared = "hello world";
}

同时启动,总是保证是 、 、 或 ?sharednull"a""hello world"


答案 1

读取和写入对于引用变量是原子的。

资料来源:http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html


答案 2

它是原子的。

但是,在您给出的示例中,的值不一定是 或 之。如果没有适当的同步,每个线程可能永远不会看到其他线程设置的值。所以会看到和将同时看到。sharednullahello worldthread 1athread 2hello world

编辑:为最后一段添加了参考资料以供进一步阅读

JLS 在第 17 章 - 线程和锁中解释了由不同线程执行的操作的顺序。具体来说,在 17.4.5 之前发生顺序部分中。此外,精心编写的Java并发实践彻底解释了所有这些。