1. 程式人生 > >談談你對AtomicInteger的理解(不看後悔,看了必懂)

談談你對AtomicInteger的理解(不看後悔,看了必懂)

AtomicInteger是一個提供原子操作的Integer類,通過執行緒安全的方式操作加減。十分適合高併發情況下的使用

 

對於全域性變數的數值型別操作 num++,若沒有加synchronized關鍵字則是執行緒不安全的,num++解析為num=num+1,明顯,這個操作不具備原子性,多執行緒時必然會出現問題。測試下:

輸出的結果為count: 9992,這個值不定,每次測試都可能不一樣,很顯然,100個執行緒跑++操作,結果並沒有像預期的那樣count: 10000。

要是換成volatile修飾count變數呢?

volatile count: 9984,果然還是出現問題了,volatile僅僅保證變數線上程間保持可見性,卻依然不能保證非原子性的操作。

用了AtomicInteger類後會變成什麼樣子呢?

結果每次都輸出"AtomicInteger count: 10000",沒毛病。concurrent(我這裡是jdk1.7)包下提供了12種原子操作型別,如下:

concurrent包下除了提供的原子更新基本型別,還有原子更新資料、原子更新引用型別、原子更新欄位類,最常用的也就是原子更新基本型別了