java并發(fā)編程專題(十一)----(JUC原子類)數(shù)組類型詳解
上一節(jié)我們介紹過(guò)三個(gè)基本類型的原子類,這次我們來(lái)看一下數(shù)組類型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray。其中前兩個(gè)的使用方式差不多,AtomicReferenceArray因?yàn)樗膮?shù)為引用數(shù)組,所以跟前兩個(gè)的使用方式有所不同。
1.AtomicLongArray介紹
對(duì)于AtomicLongArray, AtomicIntegerArray我們還是只介紹一個(gè),另一個(gè)使用方式大同小異。
我們先來(lái)看看AtomicLongArray的構(gòu)造函數(shù)和方法:
構(gòu)造函數(shù):
AtomicLongArray(int length) //創(chuàng)建給定長(zhǎng)度的新 AtomicLongArray。
AtomicLongArray(long[] array) //創(chuàng)建與給定數(shù)組具有相同長(zhǎng)度的新 AtomicLongArray,并從給定數(shù)組復(fù)制其所有元素。
方法:
long addAndGet(int i, long delta) //以原子方式將給定值添加到索引 i 的元素。
boolean compareAndSet(int i, long expect, long update) //如果當(dāng)前值 == 預(yù)期值,則以原子方式將該值設(shè)置為給定的更新值。
long decrementAndGet(int i) //以原子方式將索引 i 的元素減1。
long get(int i) //獲取位置 i 的當(dāng)前值。
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 的元素設(shè)置為給定值,并返回舊值。
long incrementAndGet(int i) // 以原子方式將索引 i 的元素加1。
void lazySet(int i, long newValue)// 最終將位置 i 的元素設(shè)置為給定值。
int length() //返回該數(shù)組的長(zhǎng)度。
void set(int i, long newValue) //將位置 i 的元素設(shè)置為給定值。
String toString() //返回?cái)?shù)組當(dāng)前值的字符串表示形式。
2.使用方式:
我們可以發(fā)現(xiàn)AtomicLongArray的使用方式和上一篇介紹的基本類型的原子類差不多,無(wú)非是換成了數(shù)組類型,另外方法里面的etAndAdd與ncrementAndGet我們要注意使用方式。
3.AtomicReferenceArray介紹
我們來(lái)看一下他的方法:
構(gòu)造方法:
AtomicReferenceArray(E[] array) //創(chuàng)建與給定數(shù)組具有相同長(zhǎng)度的新 AtomicReferenceArray,并從給定數(shù)組復(fù)制其所有元素。
AtomicReferenceArray(int length) // 創(chuàng)建給定長(zhǎng)度的新 AtomicReferenceArray。
方法:
boolean compareAndSet(int i, E expect, E update) //如果當(dāng)前值 == 預(yù)期值,則以原子方式將位置 i 的元素設(shè)置為給定的更新值。
E get(int i) //獲取位置 i 的當(dāng)前值。
E getAndSet(int i, E newValue) // 以原子方式將位置 i 的元素設(shè)置為給定值,并返回舊值。
void lazySet(int i, E newValue) //最終將位置 i 的元素設(shè)置為給定值。
int length() //返回該數(shù)組的長(zhǎng)度。
void set(int i, E newValue) // 將位置 i 的元素設(shè)置為給定值。
String toString() //返回?cái)?shù)組當(dāng)前值的字符串表示形式。
boolean weakCompareAndSet(int i, E expect, E update) // 如果當(dāng)前值 == 預(yù)期值,則以原子方式將位置 i 的元素設(shè)置為給定的更新值。
由上我們可以看到AtomicReferenceArray與前兩個(gè)的方法相比少了很多。
下面我們通過(guò)一個(gè)小例子來(lái)看一下他的使用:
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()); } }
輸出結(jié)果為:
exclude patterns:
4
null
[432141, null, fsafefeq, [I@357b2b99]Process finished with exit code 0
說(shuō)明:
- 1.當(dāng)我們使用AtomicReferenceArray(E[] array)這個(gè)構(gòu)造方法傳入一個(gè)數(shù)組對(duì)象時(shí),該數(shù)組對(duì)象必須是引用類型,int[]不可以,但是Integer[]的可以。
- 2.當(dāng)我們使用AtomicReferenceArray(int length)這個(gè)構(gòu)造函數(shù)的時(shí)候,只要為他指定了數(shù)組大小之后,你為數(shù)組的每一位設(shè)置什么值是沒(méi)有要求的,類似于Map的形式。
以上就是java并發(fā)編程專題(十一)----(JUC原子類)數(shù)組類型詳解的詳細(xì)內(nèi)容,更多關(guān)于JAVA (JUC原子類)的數(shù)組類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Idea中Springboot熱部署無(wú)效問(wèn)題解決
這篇文章主要介紹了Idea中Springboot熱部署無(wú)效問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Jenkins安裝多個(gè)jdk版本并在項(xiàng)目中選擇對(duì)應(yīng)jdk版本
在使用jenkins構(gòu)建項(xiàng)目時(shí)會(huì)遇到不同的job需要配置不同版本的jdk,下面這篇文章主要給大家介紹了關(guān)于Jenkins安裝多個(gè)jdk版本并在項(xiàng)目中選擇對(duì)應(yīng)jdk版本的相關(guān)資料,需要的朋友可以參考下2024-03-03Spring Security6 最新版配置及實(shí)現(xiàn)動(dòng)態(tài)權(quán)限管理
Spring Security 在最近幾個(gè)版本中配置的寫法都有一些變化,很多常見的方法都廢棄了,并且將在未來(lái)的 Spring Security7 中移除,因此又補(bǔ)充了一些新的內(nèi)容,重新發(fā)一下,供各位使用 Spring Security 的小伙伴們參考,需要的朋友可以參考下2024-03-03idea創(chuàng)建spring boot項(xiàng)目及java版本只能選擇17和21的問(wèn)題
這篇文章主要介紹了idea創(chuàng)建spring boot項(xiàng)目及java版本只能選擇17和21的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Java初級(jí)必看的數(shù)據(jù)類型與常量變量知識(shí)點(diǎn)
這篇文章主要給大家介紹了關(guān)于Java初級(jí)必看的數(shù)據(jù)類型與常量變量知識(shí)點(diǎn)的相關(guān)資料,需要的朋友可以參考下2023-11-11基于SSM框架+Javamail發(fā)送郵件的代碼實(shí)例
本篇文章主要介紹了基于SSM框架+Javamail發(fā)送郵件的代碼實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12Elasticsearch term 查詢之精確值搜索功能實(shí)現(xiàn)
term查詢是Elasticsearch中用于精確值搜索的一種基本方式,通過(guò)了解 term 查詢的工作原理和使用方法,你可以更好地利用 Elasticsearch 進(jìn)行結(jié)構(gòu)化數(shù)據(jù)的搜索和分析,本文將詳細(xì)介紹 term 查詢的工作原理、使用場(chǎng)景以及如何在 Elasticsearch 中應(yīng)用它,感興趣的朋友一起看看吧2024-06-06Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)
本文主要介紹Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)的內(nèi)容,感興趣的小伙伴可以參考下文2021-08-08