首页 > 作文

java并发JUC工具包AtomicInteger原子整型语法基础

更新时间:2023-04-06 03:50:40 阅读: 评论:0

atomicinteger 类底层存储一个int值,并提供方法对该int值进行原子操作。atomicinteger 作为java.util.concurrent.atomic包的一部分,从java 1.5开始引入。

1. atomicinteger基础用法

通过下文的atomicinteger构造方法,可以创建一个atomicinteger对象,该对象的初始值默认为0。atomicinteger提供get和t方法,获取底层int整数值,与设置int整数值

//初始值为0的atomicinteger对象atomicinteger atomicinteger = new atomicinteger();  //初始值为200的atomicinteger对象atomicinteger atomicinteger = new atomicinteger(200);int currentvalue = atomicinteger.get();         //100atomicinteger.t(2453);                        //现在的值是 2453

但是上面的方法,对于atomicinteger而言并不是它的核心内容,atomicinteger核心内容体现在它的原子性,我们下文介绍。

2. 什么时候需要使用atomicinteger

我们通常在以下的两种场景下使用atomicinteger

多线程并发场景下操作一个计数器,需要保证计数器操作的原子性。

进行数值比较,如果给定值与当前值相等,进行数值的更新操作,并实现操作的非阻塞算法。

2.1. 原子计数器场景

atomicinteger作为一个计数器使用,atomicinteger提供了若干方法进行加法、减法的原子操作。

比如从一个map里面获取值,用get()方法,这是第一个操作;获取到值之后给这个值加上n,这是第二个操作;将进行过加法运算的值,再次放入map里面是第三个操作。所谓操作的原子性是指:在多线程并发的场景下,上面的三个操作是原子性的,也就是不可分割的。不会出现a线程get了数值,b线程同时也get到了该数值,两个线程同时为该值做运算并先后再次放入的情况,这种情况对于atomicinteger而言是不会出现的,atomicinteger操作是线程安全的、不可分割的。

addandget()– 将给定的值加到当前值上,并在加法后返回新值,并保证操作的原子性。

getandadd()– 将给定的值加到当前值上,并返回旧值,并保证操作的原子性。

incrementandget()– 将当前值增加1,并在增加后返回新值。它相当于++i操作,并保证操作的原子性。

getandincrement()– 将当前值增加1并返回旧值。相当于++i操作,并保证操作的原子性。

decrementandget()– 将当前值减去1,并在减去后返回新值,相当于i--操作,并保证操作的原子性。

getanddecrement()– 将当前值减去1,并返回旧值。它相当于 --i操作,并保证操作的原子性。

下面是atomicinteger原子性操作方法的例子

public class main {    public static void main(string[] args) {        //初始值为100的atomic integer        atomicinteger atomicinteger = new atomicinteger(100);        system.out.println(atomicinteger.addandget(2));         //加2并返回102        system.out.println(atomicinteger);                      //102        system.out.println(atomicinteger.getandadd(2));         //先获取102,再加2        system.out.println(atomicintege辽宁对外经贸学院r);                      //104        syst沙龙会em.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. 数值比对及交换操作

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

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

boolean compareandt(int expect, int update)

expect是预期值

update是更新值

atomicinteger compareandt() 方法心灵的鸡汤的例子

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.compareandt(100,110);          system.out.println(issuccess);      //输出结果为true表示操作成功      写诗的格式  //当前值110 = 预期值100?不相等,所以atomicinteger仍然等于110        issuccess = atomicinteger.compareandt(100,120);          system.out.println(issuccess);      //输出结果为fal表示操作失败    }}

3. 总结

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

java.util.concurrent.atomic包不仅为我们提干将发硎供了atomicinteger,还提供了atomicboolean布尔原子操作类、atomiclong长整型布尔原子操作类、atomicreference对象原子操作类、atomicintegerarray整型数组原子操作类、atomiclongarray长整型数组原子操作类、atomicreferencearray对象数组原子操作类。

以上就是java并发juc工具包atomicinteger原子整型语法基础的详细内容,更多关于juc atomicinteger原子整型语法的资料请关注www.887551.com其它相关文章!

本文发布于:2023-04-06 03:50:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/db977ee090c8b0e076d3f826db24f70c.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java并发JUC工具包AtomicInteger原子整型语法基础.doc

本文 PDF 下载地址:java并发JUC工具包AtomicInteger原子整型语法基础.pdf

标签:操作   原子   数值   方法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图