并发编程-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(… ...
随机推荐
- tomcat的配置文件
在windows里使用tomcat有多种不同的方式,这里用的是压缩包的tomcat. 软件部署 独立程序启动 网上教程比较多,比较直观 1.在环境变量中设置JAVA_HOME或者JRE_HOME.必须 ...
- struts1和struts2安全线
Servlet的生命周期是"初始化->init->service->destroy->卸载". 这里大家都知道,我们在web.xml里面定义一个servle ...
- 在实现视频播放器的步骤client(三)风行网络电影列表
(三) 今日热门电影实现这个功能.主要从server获取数据.然后显示在屏幕上.虽然说是从这个server获取电影信息数据,但,不实际的http相关知识,我们直接sdk包(56网络提供api),你将能 ...
- 数字证书原理 good
文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理, ...
- JavaScript 中的12种循环遍历方法
原文:JavaScript 中的12种循环遍历方法 题目:请介绍 JavaScript 中有哪些循环和遍历的方法,说说它们的应用场景和优缺点? 1.for 循环 let arr = [1,2,3];f ...
- iOS-HTTP浅析
HTTP原理 什么是URL URL中常见的几种协议 什么是HTTP协议 HTTP是做什么的 为什么要使用HTTP协议 HTPP协议的通信过程介绍 HTTP请求 HTTP响应 HTTP请求的选择 两种发 ...
- SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名 ...
- 匹配中文字符的正则表达式: [/u4e00-/u9fa5]
原文:匹配中文字符的正则表达式: [/u4e00-/u9fa5] 这里是几个主要非英文语系字符范围(google上找到的): 2E80-33FFh:中日韩符号区.收容康熙字典部首.中日韩辅助部首.注音 ...
- 让bootstrap表格自动出现水平滚动条
<div class="table-responsive"><!--表格自动出现水平滚动条-> <table id="tb_departme ...
- Caliburn.Micro 自定义View和ViewModel的匹配规则
使用TypeMappingConfiguration类 //Override the default subnamespaces var config = new TypeMappingConfigu ...