并发编程-concurrent指南-原子操作类-AtomicInteger
在java并发编程中,会出现++,--等操作,但是这些不是原子性操作,这在线程安全上面就会出现相应的问题。因此java提供了相应类的原子性操作类。
1.AtomicInteger
aaarticlea/png;base64,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" alt="" />
可以用原子方式更新的 int 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
构造方法:
1.AtomicInteger
public AtomicInteger(int initialValue)
- 创建具有给定初始值的新 AtomicInteger
- 参数:
initialValue- 初始值
2.AtomicInteger
public AtomicInteger()
创建具有初始值 0 的新 AtomicInteger。
方法详解:
get
public final int get()
- 获取当前值。
-
- 返回:
- 当前值
set
public final void set(int newValue)
- 设置为给定值。
-
- 参数:
newValue- 新值
lazySet
public final void lazySet(int newValue)
- 最后设置为给定值。
-
- 参数:
newValue- 新值- 从以下版本开始:
- 1.6
getAndSet
public final int getAndSet(int newValue)
- 以原子方式设置为给定值,并返回旧值。
-
- 参数:
newValue- 新值- 返回:
- 以前的值
compareAndSet
public final boolean compareAndSet(int expect,
int update)
- 如果当前值
==预期值,则以原子方式将该值设置为给定的更新值。 -
- 参数:
expect- 预期值update- 新值- 返回:
- 如果成功,则返回 true。返回 False 指示实际值与预期值不相等。
weakCompareAndSet
public final boolean weakCompareAndSet(int expect,
int update)
- 如果当前值
==预期值,则以原子方式将该设置为给定的更新值。可能意外失败并且不提供排序保证,所以只有在很少的情况下才对
compareAndSet进行适当地选择。 -
- 参数:
expect- 预期值update- 新值- 返回:
- 如果成功,则返回 true。
getAndIncrement
public final int getAndIncrement()
- 以原子方式将当前值加 1。
-
- 返回:
- 以前的值
getAndDecrement
public final int getAndDecrement()
- 以原子方式将当前值减 1。
-
- 返回:
- 以前的值
getAndAdd
public final int getAndAdd(int delta)
- 以原子方式将给定值与当前值相加。
-
- 参数:
delta- 要加上的值- 返回:
- 以前的值
incrementAndGet
public final int incrementAndGet()
- 以原子方式将当前值加 1。
-
- 返回:
- 更新的值
decrementAndGet
public final int decrementAndGet()
- 以原子方式将当前值减 1。
-
- 返回:
- 更新的值
addAndGet
public final int addAndGet(int 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/5254509.html
并发编程-concurrent指南-原子操作类-AtomicInteger的更多相关文章
- 并发编程-concurrent指南-原子操作类-AtomicLong
可以用原子方式更新的 long 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicLong 可用在应用程序中(如以原子方式增加的序列号), ...
- 并发编程-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(… ...
随机推荐
- WPF 透明掩码 OpactiyMask
原文:WPF 透明掩码 OpactiyMask 在WPF中提供了Opacity属性使得元素的所有内容都是透明的.而OpacityMask属性可以使元素的特定区域变成透明. OpacityMask属性接 ...
- x:ArrayExtension
<Window.Resources> <x:ArrayExtension x:Key="array" Type="{x:Type sys:Int32}& ...
- 基于IdentityServer4的单点登录——IdentityServer
1.新建项目并添加引用 新建一个asp .net core 2.0的项目引用IdentityServer4.AspNetIdentity 2.定义资源 新建Config.cs文件,定义Api资源与Id ...
- js动态创建表格
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- IDEA 问题 & 解决
# 问题 Error: java: Compilation failed: internal java compiler error # 解决 http://blog.csdn.net/u011275 ...
- 检查Android是否支持指纹识别以及是否已经录入指纹
原文:检查Android是否支持指纹识别以及是否已经录入指纹 Android M 开始,系统中加入了指纹相关功能. 主要用到的类为:FingerprintManager 只提供三个方法: 返回值 方法 ...
- python3 无法使用flask.ext.* 报错的解决方法
python3 使用flask的一些扩展功能的导入方法是 from flask_bootstrap import Bootstrapfrom flask_moment import Momentfro ...
- Win10《芒果TV》发布两周年纪念特别献礼,陪你度国庆,好礼送不停
2015年芒果TV和微软中国联姻,在Windows10发布之际,共同宣告了Win10版<芒果TV>的诞生,第一个版本于2015年9月30日登陆Windows商店,历经28次迭代,现在她两岁 ...
- 【转】微信退款时候报”请求被中止: 未能创建 SSL/TLS 安全通道“或”The request was aborted: Could not create SSL/TLS secure channel“的错误
退款测试在我本机测试一切都是正常的,但是发布到了服务器就报这样的一个错啦 但是无论百度或者google或者bing,你能够搜索到的结果都很类似,综合起来就是加这样一些代码,如下 ServicePoin ...
- 为DataGridTemplateColumn设置快捷菜单
<DataGrid.ContextMenu> <ContextMenu> <MenuItem Command="{x:Static ApplicationCom ...