[英]Are Java pointer writes atomic?
簡單問題:Java內存/同步模型是否保證原子指針寫入? 也就是說,如果我們有競爭線程:
String shared;
thread1()
{
shared = "a";
}
thread2()
{
shared = "hello world";
}
在同一時間開始, shared
總是保證為null
, "a"
或"hello world"
?
讀取和寫入對於引用變量是原子的。
資料來源: http : //docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html
它是原子的。
然而,在這個例子中你給, shared
的價值是不是necessarly的一個 null
, a
或hello world
。 如果沒有適當的同步,每個線程可能永遠不會看到其他線程設置的值。 所以thread 1
會看到a
和thread 2
將同時看到hello world
。
編輯:添加最后一段的參考資料以供進一步閱讀
JLS解釋了第17章 - 線程和鎖定中不同線程執行的操作順序。 具體來說,在17.4.5 Happens-before Order部分中。 另外,編寫良好的Java Concurrency in Practice解釋了所有這些。
這將是這三個值中的一個,是 - 但是未定義。 最后一個在“勝利”中。
你沒有問,但為了完整 - 它不會是“hello wor”或該字符串的某些部分版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.