• java并发AtomicIntegerFieldUpdater


    java并发AtomicIntegerFieldUpdater

    支持对象的成员变量原子操作类由AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,
    AtomicReferenceFieldUpdater。

    AtomicIntegerFieldUpdater的使用特点

    它的API我还无法细致的掌握,它的使用有三点注意事项:
    1.成员变量不能是私有的
    2.int类型必须是volatile
    3.它的实现是基于反射
    以前有同事说过能不用反射就不要反射,很危险。我在写下面例子的时候,没有保证上面的两点,结果写的没有报错,
    但在运行时候就报错了,我们应该知道编译期的错误IDE都能检查出来,可见反射用得不好,只有运行才能发现。
    我认为它的实现之所以是基于反射就是因为成员变量的使用恰恰实在运行期。
    下面的例子就是这样的一个示范。

    简单例子

    package javalearn.javabase.thread.atomic;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.ToString;
    import lombok.extern.slf4j.Slf4j;
    
    import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
    import java.util.concurrent.atomic.AtomicLongFieldUpdater;
    import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
    @Slf4j
    public class AtomicLongfiledupdaterTest {
        public static void main(String[] args) {
            //AtomicLongFieldUpdater atomicLongFieldUpdater;
            //AtomicReferenceFieldUpdater atomicReferenceFieldUpdater;
            AtomicIntegerFieldUpdater atomicIntegerFieldUpdater =AtomicIntegerFieldUpdater.newUpdater(Persion.class
                    ,"id");
            Persion p1 =new Persion("jack",1);
            log.info("persion p1 is {}",p1.toString());
            atomicIntegerFieldUpdater.getAndIncrement(p1);
            log.info("persion p1 is {}",p1.toString());
    
        }
        @AllArgsConstructor
        @Data
        @ToString
        static class Persion {
            protected String name;
            protected volatile int id;
    
        }
    }
    
    

    例子结果

    22:50:00.418 [main] INFO javalearn.javabase.thread.atomic.AtomicLongfiledupdaterTest - persion p1 is AtomicLongfiledupdaterTest.Persion(name=jack, id=1)
    22:50:00.425 [main] INFO javalearn.javabase.thread.atomic.AtomicLongfiledupdaterTest - persion p1 is AtomicLongfiledupdaterTest.Persion(name=jack, id=2)
    
    Process finished with exit code 0
    
  • 相关阅读:
    js 那些事二 javascript中的闭包理解
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java入门
    Java入门
    Java入门
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11300409.html
Copyright © 2020-2023  润新知