簡體   English   中英

Java指針是否寫入原子?

[英]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的一個 nullahello world 如果沒有適當的同步,每個線程可能永遠不會看到其他線程設置的值。 所以thread 1會看到athread 2將同時看到hello world

編輯:添加最后一段的參考資料以供進一步閱讀

JLS解釋了第17章 - 線程和鎖定中不同線程執行的操作順序。 具體來說,在17.4.5 Happens-before Order部分中。 另外,編寫良好的Java Concurrency in Practice解釋了所有這些。

是。 JLS第17.7節

對引用的寫入和讀取始終是原子的,無論它們是實現為32位還是64位值。

(這並不意味着你總能看到“最新”的價值,但這是另一回事。)

這將是這三個值中的一個,是 - 但是未定義。 最后一個在“勝利”中。

你沒有問,但為了完整 - 它不會是“hello wor”或該字符串的某些部分版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM