不用AtomicInteger,Integer怎樣做到線程安全

不用AtomicInteger,Integer怎麼做到線程安全

不多說什麼,先上代碼:
在這裏插入圖片描述
輸出,都是10000,表明AtomicInteger是線程安全
在這裏插入圖片描述
換上Integer並且加上線程同步措施,結果輸入都是1000

AtomicInteger源碼與Integer源碼比較

Integer源碼就不貼了,final修飾
AtomicInteger源碼:
在這裏插入圖片描述
static代碼塊是獲取初始化之前字段內存分配之後的偏移量
getAndIncrement方法:
在這裏插入圖片描述
從源碼可以看到,使用了unsafe.getAndAddInt,其中的valueOffset就是value字段在內存中的偏移量,unsafe方法就是一個內存操作方法,所以,Integer沒能達到預期效果的原因在這,想辦法解決它就行了。

解決方案

達到內存操作的方法,除了unsafe,還有一種就是反射獲得對象並使用字段設值的方式依然可以做到相同效果,最後代碼:
在這裏插入圖片描述 測試,10000,嗯,非常的好!