歡迎您光臨本站 註冊首頁

java併發編程專題(十一)----(JUC原子類)數組類型詳解

←手機掃碼閱讀     e36605 @ 2020-07-06 , reply:0

上一節我們介紹過三個基本類型的原子類,這次我們來看一下數組類型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray。其中前兩個的使用方式差不多,AtomicReferenceArray因為他的參數為引用數組,所以跟前兩個的使用方式有所不同。

1.AtomicLongArray介紹

對於AtomicLongArray, AtomicIntegerArray我們還是隻介紹一個,另一個使用方式大同小異。

我們先來看看AtomicLongArray的構造函數和方法:

構造函數:
     AtomicLongArray(int length) //創建給定長度的新 AtomicLongArray。
     AtomicLongArray(long[] array) //創建與給定數組具有相同長度的新 AtomicLongArray,並從給定數組複製其所有元素。
     方法:
      long addAndGet(int i, long delta) //以原子方式將給定值添加到索引 i 的元素。
      boolean compareAndSet(int i, long expect, long update) //如果當前值 == 預期值,則以原子方式將該值設置為給定的更新值。
      long decrementAndGet(int i)       //以原子方式將索引 i 的元素減1。
      long get(int i)                   //獲取位置 i 的當前值。
      long getAndAdd(int i, long delta) //以原子方式將給定值與索引 i 的元素相加。
      long getAndDecrement(int i)       //以原子方式將索引 i 的元素減 1。
      long getAndIncrement(int i)       //以原子方式將索引 i 的元素加 1。
      long getAndSet(int i, long newValue) //以原子方式將位置 i 的元素設置為給定值,並返回舊值。
      long incrementAndGet(int i)       // 以原子方式將索引 i 的元素加1。
      void lazySet(int i, long newValue)// 最終將位置 i 的元素設置為給定值。
      int length()                      //返回該數組的長度。
      void set(int i, long newValue)    //將位置 i 的元素設置為給定值。
      String toString()                 //返回數組當前值的字符串表示形式。

2.使用方式:
 

我們可以發現AtomicLongArray的使用方式和上一篇介紹的基本類型的原子類差不多,無非是換成了數組類型,另外方法裡面的etAndAdd與ncrementAndGet我們要注意使用方式。

3.AtomicReferenceArray介紹

我們來看一下他的方法:

構造方法:

AtomicReferenceArray(E[] array) //創建與給定數組具有相同長度的新 AtomicReferenceArray,並從給定數組複製其所有元素。
 AtomicReferenceArray(int length) // 創建給定長度的新 AtomicReferenceArray。
 方法:
 boolean compareAndSet(int i, E expect, E update) //如果當前值 == 預期值,則以原子方式將位置 i 的元素設置為給定的更新值。
      E get(int i)                    //獲取位置 i 的當前值。
      E getAndSet(int i, E newValue)  // 以原子方式將位置 i 的元素設置為給定值,並返回舊值。
      void lazySet(int i, E newValue) //最終將位置 i 的元素設置為給定值。
      int length()                    //返回該數組的長度。
      void set(int i, E newValue)     // 將位置 i 的元素設置為給定值。
      String toString()               //返回數組當前值的字符串表示形式。
      boolean weakCompareAndSet(int i, E expect, E update) // 如果當前值 == 預期值,則以原子方式將位置 i 的元素設置為給定的更新值。

由上我們可以看到AtomicReferenceArray與前兩個的方法相比少了很多。
 下面我們通過一個小例子來看一下他的使用:

  public class AtomicReferenceArrayTest {    public static void main(String[] args) {     Long[] l = new Long[4];     String[] s = new String[4];     int[] i = new int[4];     Integer[] in = new Integer[4];     AtomicReferenceArray atomicReferenceArray = new AtomicReferenceArray(l);     System.out.println(atomicReferenceArray.length());     System.out.println(atomicReferenceArray.get(2));       AtomicReferenceArray atomic = new AtomicReferenceArray(4);     atomic.set(0,432141);     atomic.set(2,"fsafefeq");     atomic.set(3,i);     System.out.println(atomic.toString());    }   }

 

輸出結果為:

exclude patterns:
 4
 null
 [432141, null, fsafefeq, [I@357b2b99]

Process finished with exit code 0

說明:

  1. 1.當我們使用AtomicReferenceArray(E[] array)這個構造方法傳入一個數組對象時,該數組對象必須是引用類型,int[]不可以,但是Integer[]的可以。

  2. 2.當我們使用AtomicReferenceArray(int length)這個構造函數的時候,只要為他指定了數組大小之後,你為數組的每一位設置什麼值是沒有要求的,類似於Map的形式。


                                                     

   


[e36605 ] java併發編程專題(十一)----(JUC原子類)數組類型詳解已經有213次圍觀

http://coctec.com/docs/java/show-post-241469.html