java并发编程专题(十一)----(JUC原子类)数组类型详解
上一节我们介绍过三个基本类型的原子类,这次我们来看一下数组类型:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray。其中前两个的使用方式差不多,AtomicReferenceArray因为他的参数为引用数组,所以跟前两个的使用方式有所不同。
1.AtomicLongArray介绍
对于AtomicLongArray,AtomicIntegerArray我们还是只介绍一个,另一个使用方式大同小异。
我们先来看看AtomicLongArray的构造函数和方法:
构造函数:
AtomicLongArray(intlength)//创建给定长度的新AtomicLongArray。
AtomicLongArray(long[]array)//创建与给定数组具有相同长度的新AtomicLongArray,并从给定数组复制其所有元素。
方法:
longaddAndGet(inti,longdelta)//以原子方式将给定值添加到索引i的元素。
booleancompareAndSet(inti,longexpect,longupdate)//如果当前值==预期值,则以原子方式将该值设置为给定的更新值。
longdecrementAndGet(inti) //以原子方式将索引i的元素减1。
longget(inti) //获取位置i的当前值。
longgetAndAdd(inti,longdelta)//以原子方式将给定值与索引i的元素相加。
longgetAndDecrement(inti) //以原子方式将索引i的元素减1。
longgetAndIncrement(inti) //以原子方式将索引i的元素加1。
longgetAndSet(inti,longnewValue)//以原子方式将位置i的元素设置为给定值,并返回旧值。
longincrementAndGet(inti) //以原子方式将索引i的元素加1。
voidlazySet(inti,longnewValue)//最终将位置i的元素设置为给定值。
intlength() //返回该数组的长度。
voidset(inti,longnewValue) //将位置i的元素设置为给定值。
StringtoString() //返回数组当前值的字符串表示形式。
2.使用方式:
我们可以发现AtomicLongArray的使用方式和上一篇介绍的基本类型的原子类差不多,无非是换成了数组类型,另外方法里面的etAndAdd与ncrementAndGet我们要注意使用方式。
3.AtomicReferenceArray介绍
我们来看一下他的方法:
构造方法:
AtomicReferenceArray(E[]array)//创建与给定数组具有相同长度的新AtomicReferenceArray,并从给定数组复制其所有元素。
AtomicReferenceArray(intlength)//创建给定长度的新AtomicReferenceArray。
方法:
booleancompareAndSet(inti,Eexpect,Eupdate)//如果当前值==预期值,则以原子方式将位置i的元素设置为给定的更新值。
Eget(inti) //获取位置i的当前值。
EgetAndSet(inti,EnewValue) //以原子方式将位置i的元素设置为给定值,并返回旧值。
voidlazySet(inti,EnewValue)//最终将位置i的元素设置为给定值。
intlength() //返回该数组的长度。
voidset(inti,EnewValue) //将位置i的元素设置为给定值。
StringtoString() //返回数组当前值的字符串表示形式。
booleanweakCompareAndSet(inti,Eexpect,Eupdate)//如果当前值==预期值,则以原子方式将位置i的元素设置为给定的更新值。
由上我们可以看到AtomicReferenceArray与前两个的方法相比少了很多。
下面我们通过一个小例子来看一下他的使用:
publicclassAtomicReferenceArrayTest{ publicstaticvoidmain(String[]args){ Long[]l=newLong[4]; String[]s=newString[4]; int[]i=newint[4]; Integer[]in=newInteger[4]; AtomicReferenceArrayatomicReferenceArray=newAtomicReferenceArray(l); System.out.println(atomicReferenceArray.length()); System.out.println(atomicReferenceArray.get(2)); AtomicReferenceArrayatomic=newAtomicReferenceArray(4); atomic.set(0,432141); atomic.set(2,"fsafefeq"); atomic.set(3,i); System.out.println(atomic.toString()); } }
输出结果为:
excludepatterns:
4
null
[432141,null,fsafefeq,[I@357b2b99]Processfinishedwithexitcode0
说明:
- 1.当我们使用AtomicReferenceArray(E[]array)这个构造方法传入一个数组对象时,该数组对象必须是引用类型,int[]不可以,但是Integer[]的可以。
- 2.当我们使用AtomicReferenceArray(intlength)这个构造函数的时候,只要为他指定了数组大小之后,你为数组的每一位设置什么值是没有要求的,类似于Map的形式。
以上就是java并发编程专题(十一)----(JUC原子类)数组类型详解的详细内容,更多关于JAVA(JUC原子类)的数组类型的资料请关注毛票票其它相关文章!