并发编程-concurrent指南-原子操作类-AtomicLong
可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
1.AtomicLong
aaarticlea/png;base64,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" alt="" />
2.构造方法详解
AtomicLong
public AtomicLong(long initialValue)
- 创建具有给定初始值的新 AtomicLong。
- 参数:
initialValue- 初始值
AtomicLong
public AtomicLong()
创建具有初始值 0 的新 AtomicLong。
3.方法详解
get
public final long get()
- 获取当前值。
-
- 返回:
- 当前值
set
public final void set(long newValue)
- 设置为给定值。
-
- 参数:
newValue- 新值
lazySet
public final void lazySet(long newValue)
- 最后设置为给定值。
-
- 参数:
newValue- 新值- 从以下版本开始:
- 1.6
getAndSet
public final long getAndSet(long newValue)
- 以原子方式设置为给定值,并返回旧值。
-
- 参数:
newValue- 新值- 返回:
- 以前的值
compareAndSet
public final boolean compareAndSet(long expect,
long update)
- 如果当前值
==预期值,则以原子方式将该值设置为给定的更新值。 -
- 参数:
expect- 预期值update- 新值- 返回:
- 如果成功,则返回 true。返回 false 指示实际值与预期值不相等。
weakCompareAndSet
public final boolean weakCompareAndSet(long expect,
long update)
- 如果当前值
==预期值,则以原子方式将该值设置为给定的更新值。可能意外失败并且不提供排序保证,所以只能在很少的情况下对
compareAndSet进行适当地选择。 -
- 参数:
expect- 预期值update- 新值- 返回:
- 如果成功,则返回 true。
getAndIncrement
public final long getAndIncrement()
- 以原子方式将当前值加 1。
-
- 返回:
- 以前的值
getAndDecrement
public final long getAndDecrement()
- 以原子方式将当前值减 1。
-
- 返回:
- 以前的值
getAndAdd
public final long getAndAdd(long delta)
- 以原子方式将给定值添加到当前值。
-
- 参数:
delta- 要添加的值- 返回:
- 以前的值
incrementAndGet
public final long incrementAndGet()
- 以原子方式将当前值加 1。
-
- 返回:
- 更新的值
decrementAndGet
public final long decrementAndGet()
- 以原子方式将当前值减 1。
-
- 返回:
- 更新的值
addAndGet
public final long addAndGet(long delta)
- 以原子方式将给定值添加到当前值。
-
- 参数:
delta- 要添加的值- 返回:
- 更新的值
toString
public String toString()
intValue
public int intValue()
longValue
public long longValue()
floatValue
public float floatValue()
- 从类
Number复制的描述 - 以
float形式返回指定的数值。这可能会涉及到舍入。 -
- 指定者:
- 类
Number中的floatValue
-
- 返回:
- 转换为
float类型后该对象表示的数值。
doubleValue
public double doubleValue()
- 从类
Number复制的描述 - 以
double形式返回指定的数值。这可能会涉及到舍入。 -
- 指定者:
- 类
Number中的doubleValue
-
- 返回:
- 转换为
double类型后该对象表示的数值。
转自:http://www.cnblogs.com/tonylovett/p/5254548.html
并发编程-concurrent指南-原子操作类-AtomicLong的更多相关文章
- 并发编程-concurrent指南-原子操作类-AtomicInteger
在java并发编程中,会出现++,--等操作,但是这些不是原子性操作,这在线程安全上面就会出现相应的问题.因此java提供了相应类的原子性操作类. 1.AtomicInteger
- 并发编程-concurrent指南-原子操作类-AtomicBoolean
类AtomicBoolean
- 并发编程-concurrent指南-原子操作类-AtomicReference
1.类 AtomicReference<V> public class AtomicReference<V>extends Objectimplements Serializa ...
- 并发编程-concurrent指南-线程池ExecutorService的实例
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...
- 并发编程-concurrent指南-计数器CountDownLatch
java.util.concurrent.CountDownLatch 是一个并发构造,它允许一个或多个线程等待一系列指定操作的完成. CountDownLatch 以一个给定的数量初始化.count ...
- 并发编程-concurrent指南-ConcurrentMap
ConcurrentMap 是个接口,你想要使用它的话就得使用它的实现类之一. ConcurrentMap,它是一个接口,是一个能够支持并发访问的java.util.map集合: 在原有java.ut ...
- 并发编程-concurrent指南-Lock-可重入锁(ReentrantLock)
可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法 ...
- 并发编程-concurrent指南-Lock
既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述.本文先从synchronized的缺陷讲起,然后再讲述java.util.concurr ...
- 并发编程-concurrent指南-线程池ExecutorService的使用
有几种不同的方式来将任务委托给 ExecutorService 去执行: execute(Runnable) submit(Runnable) submit(Callable) invokeAny(… ...
随机推荐
- js仿黑客帝国文字数字雨效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 莱杰:期刊进口流程(文件 ID 1591640.1)
文档内容 概要 _afrLoop=2068767096030752&id=1591640.1&_afrWindowMode=0&_adf.ctrl-state=qivv ...
- .net core使用ef 6
需要是core(with full .net framework)的项目,因为core本身不支持ef 6 注意新建的项目是.net framework+.net core的 有空来填坑,参考资料写的很 ...
- CentOS 6安装桌面
安装图形界面 yum -y groupinstall "X Window System" "Chinese Support" "Desktop&quo ...
- __declspec的15种用法
__cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要 ...
- 【shell】递归函数----调用自身的函数
什么是递归函数? 一句话,调用自己的函数称为递归函数! #!/bin/bash declare -i count checkoutCount(){ read -p "Enter an cou ...
- VS点击调试卡住的问题解决方案(转载)
本来今天好好的,不知道弄到了什么,调试不了了,一点击立马卡住,就一直在那转,就在网上找了找解决方案,下面给大家列出来几种可能会卡住的问题已经解决方案 1:加载调试符号引起的卡住 解决方案: 在“选项” ...
- 一定要在commit之前做RAR备份,这样在出问题的时候,可以排除别人代码的干扰
否则找错实在是太痛苦了,根本不知道来自哪里...而这样上面那样做,可以节省时间.
- 教你如何快速使用Github
以前看过几篇github的使用教程,感觉还是不是很清晰,自从看到了这篇,通俗易懂,也学会基本的使用了,在此为大家推荐.(转自知乎,为了能让更多的人看到,请允许我使用 “原创”,如果侵权请联系.) Gi ...
- 开源项目 RethinkDB 关闭,创始人总结失败教训(市场定位错误)
当我们宣布RethinkDB关闭时,我答应写一个调查分析.我花了一些时间来整理所得的教训和经验,现在可以清楚地写出来. 在HN讨论贴中,人们提出了许多关于为什么RethinkDB失败的原因,从莫名的人 ...