当前位置:网站首页>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.
边栏推荐
- Quick access to video links at station B
- Pat 1078 hashing (25 points) ⼆ times ⽅ exploration method
- Vim 基本配置和经常使用的命令
- js之遍历数组、字符串
- Pat 1085 perfect sequence (25 points) perfect sequence
- The most comprehensive new database in the whole network, multidimensional table platform inventory note, flowus, airtable, seatable, Vig table Vika, flying Book Multidimensional table, heipayun, Zhix
- HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
- In JS, string and array are converted to each other (II) -- the method of converting array into string
- 快过年了,心也懒了
- Acdreamoj1110 (multiple backpacks)
猜你喜欢
OneNote 深度评测:使用资源、插件、模版
Opencv learning example code 3.2.3 image binarization
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
Aiko ai Frontier promotion (7.6)
Deployment of external server area and dual machine hot standby of firewall Foundation
[MySQL] basic use of cursor
20220211 failure - maximum amount of data supported by mongodb
3D人脸重建:从基础知识到识别/重建方法!
2022 fields Award Announced! The first Korean Xu Long'er was on the list, and four post-80s women won the prize. Ukrainian female mathematicians became the only two women to win the prize in history
爱可可AI前沿推介(7.6)
随机推荐
MLP (multilayer perceptron neural network) is a multilayer fully connected neural network model.
In JS, string and array are converted to each other (II) -- the method of converting array into string
Data Lake (VIII): Iceberg data storage format
Caching strategies overview
Summary of cross partition scheme
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
[go][转载]vscode配置完go跑个helloworld例子
Divide candy
JS operation DOM element (I) -- six ways to obtain DOM nodes
对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
Dialogue with Jia Yangqing, vice president of Alibaba: pursuing a big model is not a bad thing
HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
Absolute primes (C language)
ICML 2022 | Flowformer: 任务通用的线性复杂度Transformer
What's the best way to get TFS to output each project to its own directory?
Fastjson parses JSON strings (deserialized to list, map)
document. Usage of write () - write text - modify style and position control
Ravendb starts -- document metadata
R语言做文本挖掘 Part4文本分类
string的底层实现