多线程计数 AtomicInteger

大家在工作中肯定遇到过计数统计需求,单线程的情况下count直接定义int型就行,可是在多线程并发下会产生多个线程同时count++的情况,那么这种情况就需要用到AtomicInteger来保证int型变量操作的原子性。

AtomicInteger要点阐述:

1. AtomicInteger的实现是基于CAS(Compare And Swop)原理;
2. AtomicInteger的语义是:对AtomicInteger中维护的int型变量的操作是原子性的;
3. AtomicInteger实现的思想是:每个线程中都会拥有共享变量的一份私有拷贝,但由于多个线程都抢着操作共享变量,当前线程的私有拷贝已经不是共享变量的最新值;当前线程的私有拷贝只有和共享变量的最新值相等时,才能获得对共享变量的操作权利,这个操作是原子性的;当前线程的私有拷贝如何追上共享变量的最新值呢?就是在循环中不停的和共享变量最新值比,如果不相等,就把自己更新成最新值,再比,不等再更新,直到自己和最新值相等才获得了对共享变量的操作权;这套规则是AtomicInteger设计的,操作其维护的int值的线程遵守之;

public static Integer setMap(Map<Channel,AtomicInteger> map, Channel channel){
            int andIncrement = map.get(channel).incrementAndGet();
            map.put(channel,new AtomicInteger(andIncrement));
        return  map.get(channel).get();
    }

incrementAndGet()方法就是以原子方式将当前值加 1


————————————————
版权声明:本文为CSDN博主「东耳佳茗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_19201215/article/details/103243980

posted @ 2023-02-19 16:19  云里雾里的测试  阅读(212)  评论(0)    收藏  举报