[英]Does AtomicInteger handle synchronization?
如果兩個線程都使用i++遞增相同的int i
,我們可能會遇到問題,因為i++不是原子操作。 這就是為什么有AtomicInteger.increment()
,它使遞增原子。 因此,如果我們有 1 個核心和 2 個線程在執行.increment()
,則絕對沒有問題(因為它不能在操作中間暫停)。
但是,如果我們有 2 個內核和 2 個線程並且它們並行(在完全相同的時間)調用該increment()
呢?
他們是否有可能加載相同的int i
值? 這意味着如果int i
是1 ,最終結果將是2而不是3 。 在那種情況下,我們不在乎它是否是原子操作,因為它們都同時取相同的值..
底線:AtomicInteger 是否處理同步?
他們是否有可能加載相同的
int i
值?
是的,有,但它是為你處理的。
incrementAndGet
方法使用原子“比較和設置”操作來設置遞增值,但前提是尚未設置新值。 如果比較失敗,則incrementAndGet
獲取新值並重試。
最終效果是,從多個線程中使用incrementAndGet
是安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.