在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()
返回当前值的字符串表示形式。

覆盖:
类 Object 中的 toString
返回:
当前值的字符串表示形式。

intValue

public int intValue()
从类 Number 复制的描述
以 int 形式返回指定的数值。这可能会涉及到舍入或取整。

指定者:
类 Number 中的 intValue
返回:
转换为 int 类型后该对象表示的数值。

longValue

public long longValue()
从类 Number 复制的描述
以 long 形式返回指定的数值。这可能涉及到舍入或取整。

指定者:
类 Number 中的 longValue
返回:
转换为 long 类型后该对象表示的数值。

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的更多相关文章

  1. 并发编程-concurrent指南-原子操作类-AtomicLong

    可以用原子方式更新的 long 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicLong 可用在应用程序中(如以原子方式增加的序列号), ...

  2. 并发编程-concurrent指南-原子操作类-AtomicBoolean

    类AtomicBoolean

  3. 并发编程-concurrent指南-原子操作类-AtomicReference

    1.类 AtomicReference<V> public class AtomicReference<V>extends Objectimplements Serializa ...

  4. 并发编程-concurrent指南-线程池ExecutorService的实例

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...

  5. 并发编程-concurrent指南-计数器CountDownLatch

    java.util.concurrent.CountDownLatch 是一个并发构造,它允许一个或多个线程等待一系列指定操作的完成. CountDownLatch 以一个给定的数量初始化.count ...

  6. 并发编程-concurrent指南-ConcurrentMap

    ConcurrentMap 是个接口,你想要使用它的话就得使用它的实现类之一. ConcurrentMap,它是一个接口,是一个能够支持并发访问的java.util.map集合: 在原有java.ut ...

  7. 并发编程-concurrent指南-Lock-可重入锁(ReentrantLock)

    可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法 ...

  8. 并发编程-concurrent指南-Lock

    既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述.本文先从synchronized的缺陷讲起,然后再讲述java.util.concurr ...

  9. 并发编程-concurrent指南-线程池ExecutorService的使用

    有几种不同的方式来将任务委托给 ExecutorService 去执行: execute(Runnable) submit(Runnable) submit(Callable) invokeAny(… ...

随机推荐

  1. matlab GUI 编程

    matlab 语法的简便,在 GUI 上也不遑多让呀: uigetfile [filename, pathname] = uigetfile('*.m', 'choose a m file') 1. ...

  2. spring boot 使用 pageHelper插件

    按照github上的教程集成到spring boot pom文件引用需要改一下,教程的pom文件引用: 工程中要用以下方式 <!--分页--> <dependency> < ...

  3. 微信nodejs开发模块指南

    1.微信消息处理 node-weixin-message wechat 2.微信加密 node-weixin-crypto wechat-crypto 3.微信支付 node-weixin-pay w ...

  4. C# 异步委托回调函数使用

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  5. redis SERVER INSTALL WINDOWS SERVICE

    以管理 员身份 运行 CMD 命令,进入redis所在目录,并运行下 脚本redis-server --service-install redis.windows-service.conf --log ...

  6. Qt MVC设计模式(五篇)

    http://blog.csdn.net/qq_19672579/article/details/46952675http://blog.csdn.net/qq_19672579/article/de ...

  7. Plupload上传插件中文文档

    Plupload上传插件中文帮助文档 如有疑问,加群交流:646104701 下载地址:https://www.plupload.com/download/ 配置参数 实例化一个plupload对象时 ...

  8. 零元学Expression Blend 4 - Chapter 47 超简单!运用StackPanel配合OpacityMask做出倒影效果

    原文:零元学Expression Blend 4 - Chapter 47 超简单!运用StackPanel配合OpacityMask做出倒影效果 有网友问我如何在Blend内制作出倒影效果 我提供了 ...

  9. Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    原文:Android零基础入门第30节:两分钟掌握FrameLayout帧布局 前面学习了线性布局.相对布局.表格布局,那么本期来学习第四种布局--FrameLayout帧布局. 一.认识FrameL ...

  10. 我写的一个Qt 显示二维码( QR Code)的控件(可以去掉对 libpthread 的依赖,而且编译出的库文件可以在 vc2010 的release 模式下使用)

    最近一个项目需要显示二维码,所以花了点时间(只用了一个晚上,写的很不完善),写了个显示二维码的控件.当然这个控件用到了些开源的代码,比如qrencode,所以我也打算把我的代码开源. 我的代码参考了 ...