日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Concurrent——Atomic原子操作类

發(fā)布時間:2024/2/28 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Concurrent——Atomic原子操作类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉載自https://blog.csdn.net/sdlyjzh/article/details/78587777

打算把Concurrent包下面的一些類整理一下。今天先從最簡單的開始,Atomic原子類。

先看一下atomic包下的類?
?
一共12個,共分四類:基本類型、數(shù)組、引用、屬性。我們就按這四個分類,介紹一下它們的用途以及實現(xiàn)。

基本類型

包含上圖紅框里面的三個類。由于三個類提供的方法基本一致,下面以AtomicInterger為例。?
AtomicInteger的常用方法如下:?
?
實現(xiàn)邏輯都差不多,取當前值current,然后計算更改后的值。利用CAS思想,比較current和當前數(shù)值是否相等,如果相等,則更新,如果不相等,則重復上述操作。下面借助源碼分析:

/*** Atomically increments by one the current value.** @return the previous value*/public final int getAndIncrement() {for (;;) {int current = get(); //獲取當前值int next = current + 1; //執(zhí)行加1操作if (compareAndSet(current, next))return current; //返回當前值}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

可以看出,通過compareAndSet方法,保證原子操作。

public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}
  • 1
  • 2
  • 3

調用Unsafe類的compareAndSwapInt方法。Unsafe類中方法為native方法,具體未看,原理就是利用CAS。

java有8個基本類型,而這里只有3個,那么其他5個如果也想原子操作呢?其實可以參考AtomicBoolean的實現(xiàn),它先將boolean類型值轉換成int。

數(shù)組

原子數(shù)組類型參見圖中綠色框中的3個類。其底層實現(xiàn)邏輯和原子基本類型一致,這里我們看看如何使用數(shù)組類型。

static int[] value = new int[]{1,2};static AtomicIntegerArray ai = new AtomicIntegerArray(value);public static void main(String[] args){ai.getAndSet(0, 3);System.out.println(value[0]);System.out.println(ai.get(0));}

思考一下輸出,再看結果:

1 3

是不是和你預想的不一樣?傳遞的數(shù)組,為什么沒有更改原始數(shù)組呢?AtomicIntegerArray會復制傳遞過來的數(shù)組,所以,AtomicIntegerArray修改內部數(shù)組元素時,不會影響傳入的數(shù)組。

原子引用類型

3個原子引用類型,參加圖中黃色框中的類。

  • AtomicReference:原子引用類型
  • AtomicStampedReference:原子帶有版本號的引用類型
  • AtomicMarkableReference:原子帶有標記位的引用類型

原子字段類

參見上圖未框住的3個類。?
需要注意的是,因為原子字段類為抽象類,每次使用時,通過靜態(tài)方法newUpdater()創(chuàng)建一個更新器,并且設置需要更新的類和屬性。同時,更新類的字段必須用volatile修飾。

參考:《Java并發(fā)編程的藝術》

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的Concurrent——Atomic原子操作类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。