Java指针写入是原子的吗?
2022-09-03 05:48:40
简单的问题:Java内存/同步模型是否保证原子指针写入?也就是说,如果我们有竞争线程:
String shared;
thread1()
{
shared = "a";
}
thread2()
{
shared = "hello world";
}
同时启动,总是保证是 、 、 或 ?shared
null
"a"
"hello world"
简单的问题:Java内存/同步模型是否保证原子指针写入?也就是说,如果我们有竞争线程:
String shared;
thread1()
{
shared = "a";
}
thread2()
{
shared = "hello world";
}
同时启动,总是保证是 、 、 或 ?shared
null
"a"
"hello world"
它是原子的。
但是,在您给出的示例中,的值不一定是 或 之一。如果没有适当的同步,每个线程可能永远不会看到其他线程设置的值。所以会看到和将同时看到。shared
null
a
hello world
thread 1
a
thread 2
hello world
编辑:为最后一段添加了参考资料以供进一步阅读
JLS 在第 17 章 - 线程和锁中解释了由不同线程执行的操作的顺序。具体来说,在 17.4.5 之前发生顺序部分中。此外,精心编写的Java并发实践彻底解释了所有这些。