• 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
    
  • 相关阅读:
    win7 64位系统,vs2010下配置OpenGL开发环境
    OpenCV stereo matching 代码 matlab实现视差显示
    Cocos2d-x 3.x游戏开发之旅
    芯片验证漫游指南
    名师讲坛:PHP开发实战权威指南
    Python带我起飞:入门、进阶、商业实战
    新编Excel会计与财务管理应用大全(2016实战精华版)
    CorelDRAW X7中文版完全自学宝典
    HTML5 canvas开发详解(第2版)
    中文版3ds Max 2014--VRay效果图制作实用教程
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11300409.html
Copyright © 2020-2023  润新知