今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

AtomicIntegerArray

概述

类 AtomicIntegerArray 表示一个 int(整数)类型的数组可以以原子方式更新。通过传入普通的int数组来构造为AtomicIntegerArray

例子

    private static AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(10);

    public static void main(final String[] arguments) throws InterruptedException {

        for (int i = 0; i<atomicIntegerArray.length(); i++) {
            atomicIntegerArray.set(i, 1);
        }

        Thread t1 = new Thread(new Increment());
        Thread t2 = new Thread(new Compare());
        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println("Values: ");

        for (int i = 0; i<atomicIntegerArray.length(); i++) {
            System.out.print(atomicIntegerArray.get(i) + " ");
        }
    }

    static class Increment implements Runnable {

        public void run() {

            for(int i = 0; i<atomicIntegerArray.length(); i++) {
                int add = atomicIntegerArray.incrementAndGet(i);
                System.out.println("T1 Thread " + Thread.currentThread().getId()
                        + ", index " +i + ", value: "+ add);
            }
        }
    }

    static class Compare implements Runnable {

        public void run() {

            for(int i = 0; i<atomicIntegerArray.length(); i++) {
                boolean swapped = atomicIntegerArray.compareAndSet(i, 2, 3);

                if(swapped) {
                    System.out.println("T2 Thread " + Thread.currentThread().getId()
                            + ", index " +i + ", value: 3");
                }
            }
        }
    }

由于atomicIntegerArray.compareAndSet cas操作可能会失败,所以最终结果不一定都是3.

分享到:

专栏

类型标签

网站访问总量