javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术

javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术

ID:30777508

大小:157.00 KB

页数:15页

时间:2019-01-03

javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术_第1页
javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术_第2页
javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术_第3页
javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术_第4页
javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术_第5页
资源描述:

《javajuc之atomic系列12大类实例讲解和原理分解-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaJUCZAtomic系列12大类实例讲解和原理分解-编程开发技术JavaJUC之Atomic系列12大类实例讲解和原理分解原文出处:xieyu_zy在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发屮的ABA问题,木文讲述Atomic系列的类的实现以及使用方法,其中包含:基本类:Atomiclntcgcr>AtomicLong>AtomicBoolcan;引用

2、类型:AtomicReference、AtomicReference的ABA实例、AtomicStampedRerence>AtomicMarkableReference;数组类型:AtomiclntegerArray、AtomicLongArray、AtomicReferenceArray属性原子修改器(Updater):AtomicIntegerFieldUpckiter>AtomicLongFicldUpdatcrxAtomicRefcrcnccFicldUpdater看到这么多类,你是否觉得很困惑,

3、其实没什么,因为你只需耍看懂一个,英余的方法和使用都是大同小异的,相关的类会介绍他们之间的区别在哪里,在使用屮需要注意的地方即可。在使用Atomic系列前,我们需要先知道一个东西就是Unsafe类,全名为:sun.misc.Unsafe,这个类包含了大量的对C代码的操作,包括很多直接内存分配以及原子操作的调用,而它Z所以标记为非安全的,是告诉你这个里而大量的方法调用都会存在安全隐患,需要小心使用,否则会导致严重的后果,例如在通过unsafe分配内存的吋候,如果自己指定某些区域可能会导致一些类似C++—样的指

4、针越界到其他进程的问题,不过它的具体使用并不是本文的重点,本文重点是Atomic系列的内容大多会基于unsafe类中的以卜'几个本地方法來操作:对象的引用进行对比后交换,交换成功返回true,交换失败返回false,这个交换过程完全是原了的,在CPU上计算完结果后,都会对比内存的结果是否还是原先的值,若不是,则认为不能替换,因为变量是volatile类型所以最终写入的数据会被其他线程看到,所以一个线程修改成功后,其他线程就发现自C修改失败了。参数对彖所在的类本身的对象(一般这里是对一个对彖的屈性做修改,才会

5、出现并发,所以该对彖所存在的类也是有一个对彖的)参数2:这个屈性在这个对彖里而的相对便宜量位置,其实对比时是对比内存单元,所以需要属性的起始位置,而引用就是修改引用地址(根据OS、VM位数和参数配置决定宽度-般是4-8个字节),int就是修改相关的4个字节,而long就是修改相关的8个字节。获取偏移量也是通过unsafe的一个方法:objectFiclclOffset(Ficlclficlcl)来获取属性在对象屮的偏移量;静态变量需要通过:staticFieldOffset(Fieldfield)获取,调用

6、的总方法是:fieldOffset(Fieldfield)参数3:修改的引用的原始值,用于对比原来的引用和要修改的目标是否一致。参数4:修改的口标值,要将数据修改成什么。publicfinalnativebooleancompareAndSwapObject(ObjectparamObjectl,longparamLong,Objectparam0bject2,Objectparam0bjcct3);publicfinalnativebooleancompareAndSwapInt(ObjectparamO

7、bject,longparamLong,intparamInll,iniparamTnt2);#对long的操作,要看VM是否支持对Long的CAS,因为有可能VM本身不支持,若不支持,此时运算会变成Lock方式,不过现在VM都基本是支持的而已。publicfinalnativebooleancompareAndSwapLong(ObjectparamObject,longparamLongl,longparamLong2,longparamLong3);我们不推荐直接使用unsafe来操作原子变量,而是通

8、过java封装好的一些类来操作原子变量。实例代码1:AtomicIntegerTest.javaimportjava・uti1.concurrent.atomic・Atomiclnteger;publicclassAtomicIntegerTest{/***常见的方法列表直接返[Hl值增加指定的数据,返冋变*@seeAtomidnteger#get()*@seeAtomiclnteger#getAndAdd(in

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

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

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