AtomicReference、のAtomicInteger、AtomicBoolean

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_39507260/article/details/85010584

アトミックアトミック・ファミリ

アトミックアトミック・ファミリは、複数のスレッドでの動作を保証し、同じオブジェクトであるが、同時に唯一つのスレッドは、それがスレッドで動作している最新のデータことを確実にするために操作することができます。
1. AtomicReferenceは、アトミック参照は
原子は、マルチスレッド同じ物体の動作、および同期動作を保証するために、読み書きするためのオブジェクトを提供します。

private static User mUser;

    private void init() {
    	//引用对象mUser
        AtomicReference<User> ar = new AtomicReference<User>(mUser);

        //比较,若target和原子mUser是同一对象,用update替换它。
        ar.compareAndSet(V target, V update);
        //设置为newValue,并返回旧值
        ar.getAndSet(V newValue);
        //最终设置值,不能再变了
        ar.lazySet(V newValue);
        //设置为newValue
        ar.set(V newValue);
        //获取值
        ar.get();
    }

2. のAtomicIntegerは
クラスでのAtomicIntegerを実装し、このクラスでのAtomicIntegerそのものである、あなたは、次のカテゴリにさまざまな操作を実行することができますことができます。AtomicLongの使用と同様に。

private static int count;

    private void init() {
        AtomicInteger ai = new AtomicInteger(count);

        //比较,若target和原子count是同一对象,用update替换它。
        ai.compareAndSet(V target, V update);
        //获取当前,然后设置为newValue
        ai.getAndSet(V newValue);
        //最终设置值,不能再变了
        ai.lazySet(V newValue);
        //设置为newValue
        ai.set(V newValue);
        //获取值
        ai.get();
        //count加上预期值delta,然后获取值
        ai.addAndGet(int delta);
        //获取当前值,然后count加上预期值delta
        ai.getAndAdd(int delta);
        //自增/自减,然后获取值
        ai.incrementAndGet();
        ai.decrementAndGet();
        //获取值,然后自增/自减
        ai.getAndIncrement();
        ai.getAndDecrement();
    }

3. AtomicBooleanは、
次のカテゴリに様々な操作を行うことができ、このクラスはAtomicBoolean自体がある、クラスがAtomicBooleanを実装できます。

private static boolean hasValue = false;

    private void init() {
        AtomicBoolean ab = new AtomicBoolean(hasValue);
        //比较,若target和原子count是同一对象,用update替换它。
        ab.compareAndSet(V target, V update);
        //获取当前,然后设置为newValue
        ab.getAndSet(V newValue);
        //最终设置值,不能再变了
        ab.lazySet(V newValue);
        //设置为newValue
        ab.set(V newValue);
        //获取值
        ab.get();
    }

最初の3を加算

おすすめ

転載: blog.csdn.net/qq_39507260/article/details/85010584