don*_*ton 16 java multithreading synchronization atomic thread-safety
简单问题:Java内存/同步模型是否保证原子指针写入?也就是说,如果我们有竞争线程:
String shared;
thread1()
{
shared = "a";
}
thread2()
{
shared = "hello world";
}
Run Code Online (Sandbox Code Playgroud)
同时开工,shared始终保证是null,"a"或"hello world"?
Ste*_*ein 10
读取和写入对于引用变量是原子的.
资料来源:http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
它是原子的.
但是,在你给出的例子中,shared's值不一定是其中之一null,a或者hello world.如果没有适当的同步,每个线程可能永远不会看到其他线程设置的值.所以thread 1会看到a并thread 2会看到hello world在同一时间.
编辑:添加最后一段的参考资料以供进一步阅读
JLS解释了第17章 - 线程和锁定中不同线程执行的操作顺序.具体来说,在17.4.5 Happens-before Order部分中.另外,编写良好的Java Concurrency in Practice解释了所有这些.
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |