在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 类型后该对象表示的数值。

java并发编程:线程安全管理类--原子操作类--AtomicInteger的更多相关文章

  1. java并发编程 线程基础

    java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...

  2. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...

  3. Java并发编程:线程间通信wait、notify

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  4. Java并发编程:线程和进程的创建(转)

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  5. java并发编程 | 线程详解

    个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...

  6. java并发编程系列二:原子操作/CAS

    什么是原子操作 不可被中断的一个或者一系列操作 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 CAS( Compare And Swap )  为什么要有CAS? Compar ...

  7. Java并发编程——线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  8. Java并发编程——线程池

    本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...

  9. Java并发编程(三)Thread类的使用

    一.线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wait ...

  10. [转]JAVA并发编程学习笔记之Unsafe类

    1.通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语 ...

随机推荐

  1. 锁、volatile、CAS 比较

    一.锁的劣势 (1) 在JDK1.5之前都是使用synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有守 护变量的锁,都采用独占的方式来访 ...

  2. 006-spring cache-缓存实现-01-原生实现

    一.原生实现 1.1.pom <!-- 缓存 --> <dependency> <groupId>org.springframework.boot</grou ...

  3. go-005-变量、常量

    概述 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问. Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 声明变量的一般形式是使用 var 关 ...

  4. eval(PHP 4, PHP 5)

    eval — 把字符串作为PHP代码执行 说明 mixed eval ( string $code_str ) 把字符串 code_str 作为PHP代码执行. 除了其他,该函数能够执行储存于数据库文 ...

  5. CSS控制列表样式属性list-style有哪些?怎么用?

    CSS列表样式属性list-style有哪些类型?不同类型CSS控制列表样式使用时该注意什么? 这是W3Cschool用户Shirley于2016-11-10在W3Cschool编程问答提出的问题.云 ...

  6. html5语法改变

    <!doctype html> 简化了 <meta http-equiv="Content-type" content="text/html;chars ...

  7. HTML5实现手机QQ表情功能

    主要素材和JS来自QQ空间触屏版( http://m.qzone.com ),我只是代码的搬运工.代码下载. 预览请使用较新版的Chrome,然后启用开发者工具,设备模式.详见:(http://www ...

  8. WebStorm下使用TypeScript

    TypeScript也可使用Visual Studio 进行开发 TypeScript官网地址:(http://www.typescriptlang.org/) 1.先安装WebStorm WebSt ...

  9. 文件读写网络IO简单了解,同步IO和异步IO

    在Linux中,对文件的读写其实就是IO. 与IO有关的名词:同步,异步,阻塞,非阻塞,甚至是同步阻塞,同步非阻塞,异步阻塞,异步非阻塞.别急,下面有举例IO分为两大种,同步和异步 同步IO:阻塞IO ...

  10. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...