[英]Why do we need Atomic* classes if wrapper classes are already immutable?
我最近遇到了java.util.concurrent.atomic包中的原子類。 據我所知,不可變類本質上是默認的線程安全,所以我們不需要同步它們。 后來我才知道Integer,Boolean,Character等包裝類本質上是不可變的,為什么我們需要像AtomicInteger或AtomicLong這樣的Atomic *類。 另外,請解釋什么是AtomicReference 。
這是一個關於compareAndSet
原理的一個很好的問題。
來自文檔:
閱讀atomic / volatile / synchronized將幫助您保持它們之間的差異。
你有沒有想過當我有一個Integer(1)
,我怎么能把它改成Integer(2)
,整數是不可變的。所以我需要創建一個新的並設置它的值,但這個過程不是原子的。
當某些東西是可變的時,原子性的概念就來了。 我們希望修改字段/變量(可以是多步,讀取 - >更新 - >寫入)作為原子操作的操作。 因此,在多線程場景中,不應存在任何數據損壞。 java.util.concurrent.atomic包為我們做了。 包裝類是不可變的,我們無法修改它,需要創建一個新實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.