并发编程-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(… ...
随机推荐
- Android新的漏洞的应用程序中的发现!
最近,趋势科技发现一些Android中的漏洞应用程序内存.来发动攻击.我们调查了两个受影响的应用程序,大家来感受一下: .超过一千万次安装.及在下载页面拥有数十万笔用户留言的生产力应用程序(生产力应用 ...
- Angular使用echarts
安装 npm install echarts --save npm install @types/echarts --save 基本使用 定义一个dom <div id="chart& ...
- Matlab随笔之模拟退火算法
问题描述: 我方有一个基地,经度和纬度为( 70,40).假设我方飞机的速度为 1000 公里/小时. 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地.在敌方每一目 标点的侦察时间不计 ...
- 一个RPC的demo (good)
从下面的例子中可以看到,Consumer(client)的代码中引用了Provider部分的class,本例中是 com.provider.EchoServiceImpl和com.provider.E ...
- WPF Button控件模板
<Window x:Class="ControlTemplateDemo.MainWindow" xmlns="http://schemas.m ...
- Telnet协议详解(远程登陆协议)
1. 概述 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议.Telnet协议的目的是提供一个相对通用的,双向的,面向八位字节的通信方法,允许界面终端设备和面向终 ...
- Objective
1.NSSet 1.是一个无序的,管理多个对象的集合类,最大特点 是集合中不允许出现重复对象,和数学上的集合含义是一 样的 2.除了无序.不许重复之外,其它功能和NSArray是一样的 2.NSArr ...
- 图像滤镜艺术---保留细节的磨皮滤镜之PS实现
原文:图像滤镜艺术---保留细节的磨皮滤镜之PS实现 目前,对于人物照片磨皮滤镜,相信大家没用过也听过吧,这个滤镜的实现方法是多种多样,有难有简,有好有差,本人经过长时间的总结,得出了一种最简单,效果 ...
- 图像滤镜艺术---Oilpaint油画滤镜
原文:图像滤镜艺术---Oilpaint油画滤镜 Oilpaint油画滤镜 图像油画效果实际上是将图像边缘产生一种朦胧,雾化的效果,同时,将一定的边缘模糊化,这样图像整体上看去像素与像素之间 ...
- Win8Metro(C#)数字图像处理--2.29图像除法运算
原文:Win8Metro(C#)数字图像处理--2.29图像除法运算 [函数名称] 图像除法函数DivisionProcess(WriteableBitmap src, WriteableBit ...