zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    C++ primer plus读书笔记——第16章 string类和标准模板库
    C++ primer plus读书笔记——第15章 友元、异常和其他
    C++ primer plus读书笔记——第14章 C++中的代码重用
    C++ primer plus读书笔记——第13章 类继承
    C++ primer plus读书笔记——第12章 类和动态内存分配
    开发中常用的一些神器推荐
    收集常用的Linux常用命令
    【数据库】13种会导致索引失效语句写法
    Windows终端利器Cmder
    嵌入式操作系统的主要特点都有哪些
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11300409.html
Copyright © 2011-2022 走看看