Java concurrency之AtomicLong原子类_动力节点Java学院整理
Java concurrency之AtomicLong原子类 AtomicLong是Java concurrency中的一种原子类,用于对长整形进行原子操作。在32位操作系统中,64位的long和double变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。使用AtomicLong能让long的操作保持原子型。 AtomicLong的构造函数 AtomicLong():创建一个初始值为0的AtomicLong对象。 AtomicLong(long initialValue):创建一个初始值为initialValue的AtomicLong对象。 AtomicLong的常用方法 * set(long newValue):以原子方式设置当前值为newValue。 * get():获取当前值。 * decrementAndGet():以原子方式将当前值减1,并返回减1后的值。等价于“--num”。 * getAndDecrement():以原子方式将当前值减1,并返回减1前的值。等价于“num--”。 * incrementAndGet():以原子方式将当前值加1,并返回加1后的值。等价于“++num”。 * getAndIncrement():以原子方式将当前值加1,并返回加1前的值。等价于“num++”。 * addAndGet(long delta):以原子方式将delta与当前值相加,并返回相加后的值。 * getAndAdd(long delta):以原子方式将delta添加到当前值,并返回相加前的值。 * compareAndSet(long expect, long update):如果当前值 == expect,则以原子方式将该值设置为update。成功返回true,否则返回false,并且不修改原值。 * getAndSet(long newValue):以原子方式设置当前值为newValue,并返回旧值。 * intValue():返回当前值对应的int值。 * longValue():获取当前值对应的long值。 * floatValue():以float形式返回当前值。 * doubleValue():以double形式返回当前值。 * lazySet(long newValue):最后设置为给定值。延时设置变量值,这个等价于set()方法,但是由于字段是volatile类型的,因此次字段的修改会比普通字段(非volatile字段)有稍微的性能延时(尽管可以忽略),所以如果不是想立即读取设置的新值,允许在“后台”修改值,那么此方法就很有用。 * weakCompareAndSet(long expect, long update):如果当前值 == 预期值,则以原子方式将该设置为给定的更新值。 AtomicLong的实现原理 AtomicLong的实现是基于Unsafe类的compareAndSwapInt()方法,该方法使用CAS(Compare And Swap)算法来实现原子操作。CAS算法的工作原理是:首先比较当前值是否等于预期值,如果相等,则将当前值设置为更新值,否则不进行任何操作。 AtomicLong的源码分析 AtomicLong的源码是基于JDK1.7.0_40,核心实现是使用Unsafe类的compareAndSwapInt()方法来实现原子操作。 总结来说,AtomicLong是一个非常有用的原子类,用于对长整形进行原子操作。在多线程环境下,AtomicLong能够确保对长整形的操作保持原子性,从而避免了数据不一致的问题。
- 粉丝: 9
- 资源: 893
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助