当前位置:网站首页>Comparison between multithreaded CAS and synchronized
Comparison between multithreaded CAS and synchronized
2022-07-06 21:21:00 【Archie_ java】
Business scenario : You need to implement a counting function that supports concurrency
1、 The basic realization of counting function is :
public class Increment{
private int count = 0;
public void add(){
count++;
}
}
2、 The above implementation is not safe in a concurrent environment , Therefore, modify the scheme 1 It's locking synchronized:
public class Increment{
private int count = 0;
public synchronized void add(){
count++;
}
}
// Pessimistic locking , After locking, there can only be one thread for you to execute ++ operation , Other threads need to wait
// There will be no count The problem of inaccurate counting , Thread safety
3、 But the above implementation , Will serialize threads , Queue for lock 、 Lock 、 Processing data 、 Release the lock , And sending it seems unreasonable
Revise the plan 2 It's using Java Contract issuance concurrent Under the Atomic Atomic classes
public class Increment{
private AtomicInteger count = new AtomicInteger();
public synchronized void add(){
count.incrementAndGet();
}
}
// Multiple threads can execute concurrently AtomicInteger Of incrementAndGet() Method , hold count The sum of the values of 1 And return the latest value after accumulation
//Atomic The bottom layer of atomic class is unlocked CAS Mechanism , Ensure the safety of multi-threaded modification of a value
4、 Realization principle :
(1) Each thread gets the current value first , And then one atom CAS operation , That's what atoms mean CAS The operation must be completed by itself , No interruptions ;
(2) stay CAS In operation , Compare the , The current value is the same as the value I just obtained , Whether it is equal or not , Yes means that no one has changed this value , Then set it to accumulate 1 The next value is ;
(3) Empathy , If someone is executing CAS when , Find that the value you obtained before is different from the current value , It means that someone else has modified the value , Lead to CAS Failure , After failure, enter a cycle , Get the value again , Re execution CAS operation .
5、CAS The problem of :
Every time I compare , Found that the value was changed by others , Will enter the infinite repetition cycle . When a large number of threads are highly concurrent, it is equivalent to an empty loop , Self rotation , Performance and efficiency are not particularly good .
Java8 A new class of LongAdder, Try using segmentation CAS And the way of automatic segmented migration to improve the high concurrency of multithreading CAS Performance of operation . The core idea is the separation of hot spots , similar concurrentHashMap.
边栏推荐
- Absolute primes (C language)
- VIM basic configuration and frequently used commands
- 【深度学习】PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
- 启动嵌入式间:资源有限的系统启动
- 愛可可AI前沿推介(7.6)
- 039. (2.8) thoughts in the ward
- Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
- 面试官:Redis中有序集合的内部实现方式是什么?
- Replace Internet TV set-top box application through digital TV and broadband network
- 【论文解读】用于白内障分级/分类的机器学习技术
猜你喜欢
ICML 2022 | Flowformer: 任务通用的线性复杂度Transformer
KDD 2022 | 通过知识增强的提示学习实现统一的对话式推荐
【滑动窗口】第九届蓝桥杯省赛B组:日志统计
快讯:飞书玩家大会线上举行;微信支付推出“教培服务工具箱”
SAP UI5 框架的 manifest.json
爱可可AI前沿推介(7.6)
Introduction to the use of SAP Fiori application index tool and SAP Fiori tools
Interviewer: what is the internal implementation of ordered collection in redis?
Aiko ai Frontier promotion (7.6)
【mysql】触发器
随机推荐
Nodejs tutorial expressjs article quick start
JS operation DOM element (I) -- six ways to obtain DOM nodes
[sliding window] group B of the 9th Landbridge cup provincial tournament: log statistics
Web开发小妙招:巧用ThreadLocal规避层层传值
Internet News: Geely officially acquired Meizu; Intensive insulin purchase was fully implemented in 31 provinces
Pat 1085 perfect sequence (25 points) perfect sequence
Yyds dry inventory run kubeedge official example_ Counter demo counter
@GetMapping、@PostMapping 和 @RequestMapping详细区别附实战代码(全)
Why do job hopping take more than promotion?
It's almost the new year, and my heart is lazy
Aiko ai Frontier promotion (7.6)
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
js中,字符串和数组互转(一)——字符串转为数组的方法
面试官:Redis中有序集合的内部实现方式是什么?
R language visualizes the relationship between more than two classification (category) variables, uses mosaic function in VCD package to create mosaic plots, and visualizes the relationship between tw
Binary tree node at the longest distance
How to implement common frameworks
JS操作dom元素(一)——获取DOM节点的六种方式
First batch selected! Tencent security tianyufeng control has obtained the business security capability certification of the ICT Institute
In JS, string and array are converted to each other (I) -- the method of converting string into array