AtomicInteger_用法_写给自己参考的


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

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


版权声明:本文为maqingbin8888原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。