高并发编程之AtomicLongArray讲解

一、AtomicLongArray介绍
AtomicLongArray的作用则是对"长整形数组"进行原子操作,可以用原子方式更新其元素的 long 数组

二、AtomicLongArray几个常用的方法代码实例
①、创建给定长度的新 AtomicIntegerArray。

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //1、创建给定长度的新 AtomicIntegerArray。
        AtomicLongArray atomicLongArray = new AtomicLongArray(10);
        //2、将位置 i 的元素设置为给定值,默认值为0
        atomicLongArray.set(9,10);
        System.out.println("Value: " + atomicLongArray.get(9) + "默认值:" + atomicLongArray.get(0));
    }
}

②、length()方法:返回该数组的长度

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //3、返回该数组的长度
        AtomicLongArray atomicLongArray1 = new AtomicLongArray(10);
        System.out.println("数组长度:" + atomicLongArray1.length());
    }
}

③、addAndGet()方法:以原子方式先对给定下标加上特定的值,再获取相加后的值

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //4、以原子方式先对给定下标加上特定的值,再获取相加后的值
        AtomicLongArray atomicLongArray2 = new AtomicLongArray(10);
        atomicLongArray2.set(5,10);
        System.out.println("Value: " + atomicLongArray2.get(5));
        atomicLongArray2.addAndGet(5,10);
        System.out.println("Value: " + atomicLongArray2.get(5));
    }
}

④、compareAndSet()方法:如果当前值 == 预期值,则以原子方式将位置 i 的元素设置为给定的更新值。

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //5、如果当前值 == 预期值,则以原子方式将位置 i 的元素设置为给定的更新值。
        AtomicLongArray atomicLongArray3 = new AtomicLongArray(10);
        atomicLongArray3.set(5,10);
        System.out.println("当前值: " + atomicLongArray3.get(5));
        Boolean bool = atomicLongArray3.compareAndSet(5,10,30);
        System.out.println("结果值: " + atomicLongArray3.get(5) + " Result: " + bool);
    }
}

⑤、decrementAndGet()方法:以原子方式先将当前下标的值减1,再获取减1后的结果

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //6、以原子方式先将当前下标的值减1,再获取减1后的结果
        AtomicLongArray atomicLongArray4 = new AtomicLongArray(10);
        atomicLongArray4.set(5,10);
        System.out.println("下标为5的值为:" + atomicLongArray4.get(5));
        Long result1 = atomicLongArray4.decrementAndGet(5);
        System.out.println("result1的值为:" + result1);
        System.out.println("下标为5的值为:" + atomicLongArray4.get(5));
    }
}

⑥、getAndAdd()方法:以原子方式先获取当前下标的值,再将当前下标的值加上给定的值

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //7、以原子方式先获取当前下标的值,再将当前下标的值加上给定的值
        AtomicLongArray atomicLongArray5 = new AtomicLongArray(10);
        atomicLongArray5.set(5,10);
        Long result2 = atomicLongArray5.getAndAdd(5,5);
        System.out.println("result2的值为:" + result2);
        System.out.println("下标为5的值为:" + atomicLongArray5.get(5));
    }
}

⑦、getAndDecrement()方法:以原子方式先获取当前下标的值,再对当前下标的值减1

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //8、 以原子方式先获取当前下标的值,再对当前下标的值减1
        AtomicLongArray atomicLongArray6 = new AtomicLongArray(10);
        atomicLongArray6.set(1,10);
        System.out.println("下标为1的值为:" + atomicLongArray6.get(1));
        Long result3 = atomicLongArray6.getAndDecrement(1);
        System.out.println("result3的值为:" + result3);
        System.out.println("下标为1的值为:" + atomicLongArray6.get(1));
    }
}

⑧、getAndIncrement()方法:以原子方式先获取当前下标的值,再对当前下标的值加1

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //9、 以原子方式先获取当前下标的值,再对当前下标的值加1
        AtomicLongArray atomicLongArray7 = new AtomicLongArray(10);
        atomicLongArray7.set(2,10);
        System.out.println("下标为2的值为:" + atomicLongArray7.get(2));
        Long result4 = atomicLongArray7.getAndIncrement(2);
        System.out.println("result4的值为:" + result4);
        System.out.println("下标为2的值为:" + atomicLongArray7.get(2));
    }
}

⑨、getAndSet()方法:将位置 i 的元素以原子方式设置为给定值,并返回旧值。

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //10、将位置 i 的元素以原子方式设置为给定值,并返回旧值。
        AtomicLongArray atomicLongArray8 = new AtomicLongArray(10);
        atomicLongArray8.set(3,10);
        System.out.println("下标为3的值为:" + atomicLongArray8.get(3));
        Long result5 = atomicLongArray8.getAndSet(3,50);
        System.out.println("result5的值为:" + result5);
        System.out.println("下标为3的值为:" + atomicLongArray8.get(3));
    }
}

⑩、incrementAndGet()方法: 以原子方式先对下标加1再获取值

package chapter3.atomiclongarray;

import java.util.concurrent.atomic.AtomicLongArray;

/**
 * @author czd
 */
public class AtomicLongArrayTest {
    public static void main(String[] args) {
        //11、 以原子方式先对下标加1再获取值
        AtomicLongArray atomicLongArray9 = new AtomicLongArray(10);
        atomicLongArray9.set(4,10);
        System.out.println("下标为4的值为:" + atomicLongArray9.get(4));
        Long result6 = atomicLongArray9.incrementAndGet(4);
        System.out.println("result6的值为:" + result6);
        System.out.println("下标为4的值为:" + atomicLongArray9.get(4));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值