首页 > 其他分享 >多线程计数 AtomicInteger

多线程计数 AtomicInteger

时间:2023-02-19 16:22:05浏览次数:29  
标签:变量 int AtomicInteger 计数 线程 共享 多线程 channel

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

标签:变量,int,AtomicInteger,计数,线程,共享,多线程,channel
From: https://www.cnblogs.com/vt567/p/17134951.html

相关文章

  • 多线程lock 为什么要lock,lock了什么?
    一.为什么要lock,lock了什么?当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,就需要同步......
  • 【多线程与高并发】- synchronized锁的认知
    synchronized锁的认知......
  • 多线程2
    1、在我们实际使⽤中,线程池的⼤⼩配置多少合适?对于计算密集型,设置线程数=CPU数+1;对于I/O密集型,线程数=CPU数*CPU利⽤率*(任务等待时间/(任务计算时间+1))......
  • 十二重计数法
    问题背景:(组合版本)\(n\)个小球放入\(m\)个盒子中。(集合版本)\(n\)元集合映射到\(m\)元集合。有\(12\)种对方案的计数方式。球和盒子是否相同(意思是,对于两个相同......
  • Python多进程与多线程
    多进程更适合CPU密集型任务,而多线程更适合IO密集型任务。多进程multiprocessing模块importmultiprocessingdefmy_function(arg1,arg2):print("Dosomethingw......
  • PAT-basic-1024 科学计数法 java
    一、题目科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该......
  • 一个有趣的计数技巧
    抽象地,定义\(g_i\)表示选\(i\)个位置对应的结果,假设答案的式子为\[ans=\sum_{i=0}^ng_i\theta^i\]可以直接在\(\text{dp}\)的过程中维护\(\theta^i\),即,每多选......
  • JAVA多线程(二)--线程池
    JAVA多线程(二)--线程池一、线程池概念顾名思义,线程池是管理线程的池子。使用线程池有以下优点:降低线程创建和销毁的开销。提高响应速度。用到时创建和直接使用已创建......
  • 多线程
    一、Process与Thread1.进程是执行程序的一次执行过程,是系统资源分配的单位。2.一个进程可以包含若干个线程,至少有一个线程。 二、三种创建方式1.......
  • 微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新
    写在前面关于Playwright系列的文章,真的很久没有写了,今天一个不小心官方API部分过完了,下面将为大家逐一演示,感兴趣的同学可以自行动手练习。API部分多线程直白点说就是......