java中的atomic包使用指南-编程开发技术

java中的atomic包使用指南-编程开发技术

ID:30768909

大小:57.00 KB

页数:5页

时间:2019-01-03

java中的atomic包使用指南-编程开发技术_第1页
java中的atomic包使用指南-编程开发技术_第2页
java中的atomic包使用指南-编程开发技术_第3页
java中的atomic包使用指南-编程开发技术_第4页
java中的atomic包使用指南-编程开发技术_第5页
资源描述:

《java中的atomic包使用指南-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java中的Atomic包使用指南-编程开发技术Java中的Atomic包使用指南原文出处:方腾飞Java从JDK1.5开始提供了java.util,concurrent,atomic包,方便程序员在多线程环境下,无锁的进行原了操作。原了变量的底层使用了处理器提供的原了指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需耍某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。Atomic包介绍在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更新数组,原子更新

2、引用和原子更新字段。Atomic包里的类基木都是使用Unsafe实现的包装类。原子更新基本类型类用于通过原子的方式更新基本类型,Atomic包提供了以下三个类:•AtomicBoolean:原子更新布尔类型。•Atomiclnteger:原了更新整型。•AtomicLong:原了更新长整型。Atomiclnteger的常用方法如下:•intaddAndGet(intdelta):以原子方式将输入的数值与实例屮的值(Atomiclnteger里的value)相加,并返回结果•booleancompar

3、eAndSet(intexpect,intupdate):如果输入的数值等于预期值,则以原子方式将该值设置为输入的值。•intgetAndIncrement():以原子方式将当前值加1,注意:这里返冋的是H增前的值。•voidlazySet(intnewValue):最终会设置成newValue,使用lazySet设置值后,可能导致其他线程在之后的一小段时间内还是町以读到旧的值。关于该方法的更多信息可以参考并发网翻译的一篇文章《AtomicLong.lazySet是如何工作的?》•intgetAnd

4、Set(intnewValue):以原子方式设置为newValue的值,并返回旧值。Atomiclnteger例子代码如卜:importjava.uti1.concurrent.atomic・Atomiclnteger;publicclassAtomicIntegerTest{staticAtomidntegerai=newAtomicTnteger(1);publicstaticvoidmain(String[]args){System,out.print.ln(ai.getAndlncremen

5、t());System,out.printin(ai.get());输出12餐后甜点Atomic包提供了三种基本类型的原子更新,但是Java的基本类型里还有char,float和double等。那么问题來了,如何原了的更新其他的基木类型呢?Atomic包里的类基木都是使用Unsafe实现的,讣我们一起看下Unsafe的源码,发现Unsafe只提供了三种CAS方法,compareAndSwapObject,compareAndSwapInt和comparcAndSwapLong,再看AtomicBoo

6、lcan源码,发现其是先把Boolean转换成整型,再使用compareAndSwapInt进行CAS,所以原子更新double也可以用类似的思路來实现。原子更新数组类通过原了的方式更新数组里的某个元素,Atomic包提供了以卜•三个类:•AtomicIntegerArray:原子更新幣型数组里的元素。•AtomicLongArray:原了更新长整型数组里的元素。•AtomicReferenceArray:原子更新引用类型数组里的元素。AtomicIntegerArray类主要是提供原子的方式更新数

7、组里的整型,其常用方法如下•intaddAndGet(inti,intdelta):以原子方式将输入值与数组中索引i的元素相加。•booleancompareAndSet(inti,intexpect,intupdate):如果当前值等于预期值,则以原子方式将数组位置i的元素设置成update值。实例代码如下:publicclassAtomicIntegerArra^^Test{staticint[]value二newint[]{1,2};staticAtomicIntcgcrArrayai=new

8、AtomicIntcgcrArray(value);publicstaticvoidmain(String[]args){ai.getAndSet(0,3);System,out.println(ai.get(0));System・out・println(valuc[0]);}I输出31AtomicIntegerArray类需要注意的是,数组value通过构造方法传递进去,然后AtomicIntegerArray会将当前数组复制一份,所以当AtomicIntegerA

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。