AtomicInteger_用法_写给自己参考的

本文深入探讨了Java中Atomic类的使用方法与原理,包括AtomicInteger、AtomicBoolean、AtomicReference、AtomicLongArray等,解析了它们在高并发场景下的应用及如何解决ABA问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import java.util.concurrent.atomic.AtomicInteger;
AtomicInteger index=new AtomicInteger(0);
System.out.println(index.getAndIncrement());//0  //先返回值然后再执行+1操作
System.out.println(index.getAndIncrement());//1
index.set(0);
System.out.println(index.get());//0

index.incrementAndGet();  //先执行增加然后 再返回值

LongAddr 高并发

LongAddr longAddr = new LongAddr();
longAddr.increment();
原理解释如下

AtomicBoolean  如何让某段代码执行一次绝对不重复

如果是false的时候,则变成true   这个类在实际还是比较常用的

AtomicReference

    public static AtomicReference<Integer> count = new AtomicReference<>(0);
    public static void main(String[] args) {
        count.compareAndSet(0, 2);//2
        count.compareAndSet(0, 1);
        count.compareAndSet(1, 3);
        count.compareAndSet(2, 4);//4
        count.compareAndSet(3, 5);
        System.out.println(count.get());
    }

AtomicIntegerFieldUpdater

更改类中的一个字段 并且是并发安全的 有两个条件
1. 该字段不能是static来修饰
2.该字段必须使用 voliate 关键字来修饰
3. 该字段必须 是 public 来修改

 

AtomicStampReference

解决ABA问题
1. 其它线程将原始A改成B,又改回A
而本线程发现是A 就进行操作
-------
因为这个时候被其实A变过这与CAS设计思想是不符合的
ABA 的解决思路是每次变量更新 把变量的版本号加1
核心的方法
compareAndSet()

AtomicLongArray

一个数组,可以实现对数组元素进行操作 操作的时候要求传入索引值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值