当前位置:网站首页>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.
边栏推荐
- JS traversal array and string
- Web开发小妙招:巧用ThreadLocal规避层层传值
- js之遍历数组、字符串
- OneNote 深度评测:使用资源、插件、模版
- 分糖果
- 快讯:飞书玩家大会线上举行;微信支付推出“教培服务工具箱”
- Deployment of external server area and dual machine hot standby of firewall Foundation
- 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
- 数据湖(八):Iceberg数据存储格式
- Absolute primes (C language)
猜你喜欢
嵌入式开发的7大原罪
【深度学习】PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
【Redis设计与实现】第一部分 :Redis数据结构和对象 总结
Fastjson parses JSON strings (deserialized to list, map)
【mysql】游标的基本使用
ICML 2022 | Flowformer: 任务通用的线性复杂度Transformer
Set up a time server
967- letter combination of telephone number
[in depth learning] pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs
互联网快讯:吉利正式收购魅族;胰岛素集采在31省全面落地
随机推荐
SDL2来源分析7:演出(SDL_RenderPresent())
The difference between break and continue in the for loop -- break completely end the loop & continue terminate this loop
Absolute primes (C language)
Fastjson parses JSON strings (deserialized to list, map)
js通过数组内容来获取数组下标
Three schemes of SVM to realize multi classification
Quick news: the flybook players' conference is held online; Wechat payment launched "education and training service toolbox"
JS operation DOM element (I) -- six ways to obtain DOM nodes
3D人脸重建:从基础知识到识别/重建方法!
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
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
JS学习笔记-OO创建怀疑的对象
监控界的最强王者,没有之一!
Deployment of external server area and dual machine hot standby of firewall Foundation
Is this the feeling of being spoiled by bytes?
Torch Cookbook
首批入选!腾讯安全天御风控获信通院业务安全能力认证
VIM basic configuration and frequently used commands
Math symbols in lists
Opencv learning example code 3.2.3 image binarization