大家在工作中肯定遇到过计数统计需求,单线程的情况下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