java atomicinteger实现原理,

  java atomicinteger实现原理,

  00-1010 1.AtomicInteger 2的基本用法。什么时候需要使用AtomicInteger2.1 .原子计数器场景2.2。数值比较和交换运算3。总结一下原子整数类的底层存储一个int值,提供对int值进行原子操作的方法。AtomicInteger作为java.util.concurrent.atomic包的一部分,是从Java 1.5引入的。

  00-1010您可以通过以下AtomicInteger构造方法创建一个AtomicInteger对象,其初始值默认为0。AtomicInteger提供get和set方法来获取底层的int整数值,并设置int整数值。

  //atomicInteger对象,初始值为0 atomic integer atomic integer=newatomic integer();//atomicInteger对象,初始值为200 atomic integer atomic integer=New atomic integer(200);int current value=atomic integer . get();//100 atomic integer . set(2453);//当前值为2453但上述方法不是AtomicInteger的核心内容。AtomicInteger的核心内容体现在它的原子性上,我们下面会介绍。

  00-1010我们通常在以下两种情况下使用AtomicInteger

  为了在多线程场景中操作计数器,有必要确保计数器操作的原子性。

  比较值,如果给定值等于当前值,更新值,实现操作的非阻塞算法。

  00-1010 AtomicInteger用作计数器。AtomicInteger为加法和减法的原子操作提供了几种方法。

  比如从一个map中获取值,使用get()方法,这是第一个操作;得到值后,在这个值上加N,这是第二次运算;这是第三次操作,将附加值再次放入map。所谓操作的原子性,是指在多线程并发的场景下,上述三种操作是原子性的,即不可分的。不会出现线程A获取值,线程B同时获取值,两个线程同时计算值再放入的情况。这种情况不会发生在AtomicInteger上。AtomicInteger操作是线程安全和不可分的。

  add get()-将给定值与当前值相加,并返回相加后的新值,并保证操作的原子性。

  GetAndAdd()-将给定值与当前值相加,返回旧值,并保证操作的原子性。

  IncrementAndGet()-将当前值增加1,并返回增加后的新值。它相当于I操作,保证了操作的原子性。

  GetIncrement()-将当前值增加1并返回旧值。相当于I操作,并保证操作的原子性。

  DecrementAndGet()-将当前值减1,返回减法后的新值,相当于I操作,保证了操作的原子性。

  get decrement()-将当前值减1并返回旧值。它相当于-I操作,并保证了操作的原子性。

  下面是AtomicInteger原子操作方法的一个例子。

  public class main { public static void main(string[]args){//Atomic integer Atomic integer=new Atomic integer(100),初始值为100;system . out . println(atomic integer . addandget(2));//加2,返回102system.out.println(原子整数);//102系统

  em.out.println(atomicInteger.getAndAdd(2)); //先获取102,再加2 System.out.println(atomicInteger); //104 System.out.println(atomicInteger.incrementAndGet()); //加1再获取105 System.out.println(atomicInteger); //105 System.out.println(atomicInteger.getAndIncrement()); //先获取105再加1 System.out.println(atomicInteger); //106 System.out.println(atomicInteger.decrementAndGet()); //减1再获取105 System.out.println(atomicInteger); //105 System.out.println(atomicInteger.getAndDecrement()); //先获取105,再减1 System.out.println(atomicInteger); //104 }}

 

  

2.2. 数值比对及交换操作

compareAndSet操作将一个内存位置的内容与一个给定的值进行比较,只有当它们相同时,才会将该内存位置的内容修改为一个给定的新值。这个过程是以单个原子操作的方式完成的。

 

  compareAndSet方法:如果当前值==预期值,则将值设置为给定的更新值。

  

boolean compareAndSet(int expect, int update)

expect是预期值

 

  update是更新值

  AtomicInteger compareAndSet() 方法的例子

  

import java.util.concurrent.atomic.AtomicInteger;public class Main { public static void main(String[] args) { //初始值为100的atomic Integer AtomicInteger atomicInteger = new AtomicInteger(100); //当前值100 = 预期值100,所以设置atomicInteger=110 boolean isSuccess = atomicInteger.compareAndSet(100,110); System.out.println(isSuccess); //输出结果为true表示操作成功 //当前值110 = 预期值100?不相等,所以atomicInteger仍然等于110 isSuccess = atomicInteger.compareAndSet(100,120); System.out.println(isSuccess); //输出结果为false表示操作失败 }}

 

  

3. 总结

AtomicInteger可以帮助我们在不使用synchronized同步锁的情况下,实现在多线程场景下int数值操作的线程安全,操作的原子性。并且使用AtomicInteger来实现int数值的原子操作,远比使用synchronized同步锁效率更高。

 

  java.util.concurrent.atomic包不仅为我们提供了AtomicInteger,还提供了AtomicBoolean布尔原子操作类、AtomicLong长整型布尔原子操作类、AtomicReference对象原子操作类、AtomicIntegerArray整型数组原子操作类、AtomicLongArray长整型数组原子操作类、AtomicReferenceArray对象数组原子操作类。

  以上就是java并发JUC工具包AtomicInteger原子整型语法基础的详细内容,更多关于JUC AtomicInteger原子整型语法的资料请关注盛行IT其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: