[英]Java boolean expression concurrency behavior
請考慮以下情況。 某個類中有兩個AtomicInteger
字段:
private final AtomicInteger first = new AtomicInteger();
private final AtomicInteger second = new AtomicInteger();
然后我有這樣的事情:
boolean equal = first.get() == second.get();
因此,問題是如何精確計算此表達式? 變量可以在評估過程中更改值嗎? 例如,當我們開始對表達式求值時, first
和second
變量是否可能相等,但是在first.get()
和second.get()
的求值之間,其中一些second.get()
發生了變化,因此equal
second.get()
false
嗎? 還是通過比較調用變量的快照來原子地評估表達式?
提前致謝!
您假設正確。 只有first.get()
和second.get()
是原子的,每個原子都是自己的。 因此,在您調用first.get()
之后,second的值可以更改。
您將需要同步或以其他方式鎖定first
和second
以確保兩者之間的原子性。
變量可以在評估過程中更改值嗎?
絕對。 對first.get()
和second.get()
的調用是彼此獨立進行的。 如果second
在first.get()
完成之后但在second.get()
開始之前發生更改, first.get()
使用評估其get()
時的second
值。
實際上,在您的場景中, first
和second
是AtomicInteger
,在first == second
比較中使用常規int
並沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.