Java 并发编程之 AtomicIntegerFieldUpdater AtomicLongFieldUpdater AtomicReferenceFieldUpdater

Java juc 大约 2082 字

说明

并发原子修改器,保证在多线程环境下对象中的字段的原子性。

示例

对象类

public class FieldUpdaterTest {

    volatile String name;

    volatile int age1;

    volatile Integer age2;

    volatile long money1;

    volatile Long money2;

}

AtomicIntegerFieldUpdater

只能是基础类型的int,不能是Integer包装类型。

public class AtomicIntegerFieldUpdaterDemo {

    public static void main(String[] args) {
        FieldUpdaterTest fieldUpdaterTest = new FieldUpdaterTest();
        AtomicIntegerFieldUpdater<FieldUpdaterTest> updater1 =
                AtomicIntegerFieldUpdater.newUpdater(FieldUpdaterTest.class, "age1");
        System.out.println(updater1.compareAndSet(fieldUpdaterTest, 0, 10));
        System.out.println(fieldUpdaterTest.age1);

        // 必须是基础类型的 int
//        AtomicIntegerFieldUpdater<FieldUpdaterTest> updater2 =
//                AtomicIntegerFieldUpdater.newUpdater(FieldUpdaterTest.class, "age2");
    }

}

AtomicLongFieldUpdater

只能是基础类型的long,不能是Long包装类型。

public class AtomicLongFieldUpdaterDemo {

    public static void main(String[] args) {
        FieldUpdaterTest fieldUpdaterTest = new FieldUpdaterTest();
        AtomicLongFieldUpdater<FieldUpdaterTest> updater1 =
                AtomicLongFieldUpdater.newUpdater(FieldUpdaterTest.class, "money1");
        System.out.println(updater1.compareAndSet(fieldUpdaterTest, 0, 10));
        System.out.println(fieldUpdaterTest.money1);

        // 必须是基础类型的 long
//        AtomicLongFieldUpdater<FieldUpdaterTest> updater2 =
//                AtomicLongFieldUpdater.newUpdater(FieldUpdaterTest.class, "money2");
    }

}

AtomicReferenceFieldUpdater

public class AtomicReferenceFieldUpdaterDemo {

    public static void main(String[] args) {
        FieldUpdaterTest fieldUpdaterTest = new FieldUpdaterTest();
        AtomicReferenceFieldUpdater<FieldUpdaterTest, String> updater =
                AtomicReferenceFieldUpdater.newUpdater(FieldUpdaterTest.class, String.class, "name");
        System.out.println(updater.compareAndSet(fieldUpdaterTest, null, "张三"));
        System.out.println(fieldUpdaterTest.name);
    }

}
阅读 50 · 发布于 2021-09-25

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批