AtomicInteger类

今天写代码,尝试使用了AtomicInteger这个类,感觉使用起来很爽,特别适用于高并发访问,能保证i++,++id等系列操作的原子性。++i和i++操作并不是线程安全的,很多人会用到synchronized关键字。相对与AtomicInteger这个类而言。AtomicInteger可以用原子方式更新的
int 值。AtomicInteger对int型加减操作的线程安全,性能上远远优越于synchronized。

这是AtomicInteger源码中提供的全部接口方法。

构造方法摘要

AtomicInteger()

创建具有初始值 0 的新 AtomicInteger。

AtomicInteger(int initialValue)

创建具有给定初始值的新 AtomicInteger。

方法摘要

int addAndGet(int delta)

以原子方式将给定值与当前值相加。

boolean compareAndSet(int expect, int update)

如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

int decrementAndGet()

以原子方式将当前值减 1。

double doubleValue()

以 double 形式返回指定的数值。

float floatValue()

以 float 形式返回指定的数值。

int get()

获取当前值。

int getAndAdd(int delta)

以原子方式将给定值与当前值相加。

int getAndDecrement()

以原子方式将当前值减 1。

int getAndIncrement()

以原子方式将当前值加 1。

int getAndSet(int newValue)

以原子方式设置为给定值,并返回旧值。

int incrementAndGet()

以原子方式将当前值加 1。

int intValue()

以 int 形式返回指定的数值。

void lazySet(int newValue)

最后设置为给定值。

long longValue()

以 long 形式返回指定的数值。

void set(int newValue)

设置为给定值。

String toString()

返回当前值的字符串表示形式。

boolean weakCompareAndSet(int expect, int update)

如果当前值 == 预期值,则以原子方式将该设置为给定的更新值。

下面贴一个简单的例子:

class Counter {

private volatile int count = 0;

public synchronized void increment() {

count++;  //若要线程安全执行执行count++,需要加锁

}

public int getCount() {

return count;

}

}

class Counter {

private AtomicInteger count = new AtomicInteger();

public void increment() {

count.incrementAndGet();

}

//使用AtomicInteger之后,不需要加锁,也可以实现线程安全。

public int getCount() {

return count.get();

}

}

时间: 2024-12-27 04:41:36

AtomicInteger类的相关文章

AtomicInteger类的理解及使用

AtomicInteger在多线程并发场景的使用 AtomicInteger提供原子操作来进行Integer的使用,因此十分适合高并发情况下的使用. AtomicInteger位于包package java.util.concurrent.atomic下,主要源码如下: 首先看到改类里有两个私有的静态变量unsafe和valueOffset,unsafe在jdk源码里通过Unsafe.getUnsafe()得到,但是我们自己是没办法 在代码里直接调用这个静态方法的,因为这个方法在调用时会判断类加

AtomicInteger类的理解与使用

AtomicInteger类的理解与使用 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Sample1 { private static Integer count = 0; synchronized public static void increment() { count++; } } 以下是AtomicInteger的: public class Sample2 { private static AtomicInteger

AtomicInteger类和int原生类型自增鲜明的对比

AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题.比如说 int i = 0 ; i++; 上面的写法是线程不安全的. 有的人可能会说了,可以使用synchronized关键字啊. 但是这里笔者要说的是,使用了synchronized去做同步的话系统的性能将会大大下降. 所以此时AtomicInteger这个类的使用就可以满足上述的情况. 当我们统计一个页面的浏览量的时候,可以使用该类来统计,而不再使用++运算符. 但是在使用的过程中,笔者发现

Java AtomicInteger类的使用方法详解_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Sample1 { private static Integer count = 0; synchronized public static void increment() { count++; } } 以下是AtomicInteger的: public class Sample2 { private s

AtomicInteger类保证线程安全的用法

J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增.在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个或两个以上的操作)通常都需要被synchronize以便两者的操作能够被当作是一个atomic的单元.

【java】线程安全的整型类AtomicInteger

一.遇见AtomicInteger 在看项目代码的时候看到这个类,发现其功能很简单,就是一个整型变量的类型,出于好奇看了其类定义. 该类位于java.util.concurrent.atomic下,在concurrent下可知该类肯定与并发和原子性相关. 二.进一步了解 源码非常简单,结合其他人的博客,基本可以了解到AtomicInteger类是一个提供原子操作的Integer类. 普通的整型类如int和Integer类,在++i/i++等操作并不是线程安全的,在并发环境下容易出现脏数据. At

【JAVA并发】AtomicInteger源码注释

AtomicInteger源码 在java.util.concurrent.atomic包下提供了大量的原子类,这里以AtomicInteger源码为例,添加了一些注释,个人理解,供参考: 其中比较重要的一个概念是CAS操作,现代CPU已广泛支持,在JDK的AtomicInteger类中是调用了Unsafe类的compareAndSwapInt方法实现的,代码(jdk1.7.0_79)如下: package java.util.concurrent.atomic; import sun.misc

Java多线程系列一——Atomic类

参考资料:https://fangjian0423.github.io/2016/03/16/java-AtomicInteger-analysis/http://www.cnblogs.com/549294286/p/3766717.html 最近面试遇到一道编程题,要求两个线程交替打印[0,100]的数字,其中一个只打印奇数,另一个只打印偶数,并且给出特别明显的提示AtomicInteger,当时我在想简直是送分题啊,但事后回想由于手写又没有记得所有API,很多地方不完美,所以面试官最后让我

Java原子性操作类应用

Java5的线程并发库中,提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 java.util.concurrent在并发编程中很常用的实用工具类. |----locks为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器 |----atomic类的小工具包,支持在单个变量上解除锁的线程安全编程.可以对基本类型.数组中的基本类型.类中的基本类型等进行操