This article brings you related issues about java, which mainly introduces issues related to CAS, CAS (compare and swap), compare and exchange, which can solve multi-thread parallel situations Here is a mechanism of performance loss caused by using locks. I hope it will be helpful to everyone.
Recommended study: "java tutorial"
CAS (compare and swap), Compare and swap. A mechanism that can solve the performance loss caused by using locks in multi-thread parallel situations. The CAS operation contains three operands—memory location (V), expected original value (A) and new value (B). If the value of a memory location matches the expected original value, the processor automatically updates the location to the new value. Otherwise, the processor does nothing. A thread gets the num value from the main memory and operates on num. When writing the value, the thread will compare the first num value obtained with the num value in the main memory. If they are equal, the changed value will be num is written into the main memory. If they are not equal, the comparison will be looped until successful.
The volatile keyword is often used when modifying shared variables, but the volatile value has visibility and prohibits instruction reshooting (orderliness), and atomicity cannot be guaranteed. Although there is no problem in single thread, various problems will occur in multi-threading, causing on-site insecurity. Therefore, CAS was produced after jdk1.5 and uses CPU primitives (indivisible, continuous and uninterrupted) to ensure the atomicity of on-site operations.
The new java.util.concurrent(JUC) in JDK1.5 is built on CAS. Compared with the synchronized lock mechanism, CAS is a common implementation of non-blocking algorithms. Therefore, JUC has greatly improved its performance.
For exampleAtomicInteger class, AtomicInteger is thread-safe, the following is the source code
EnterunsafeSeedo whileself-loop, the self-loop here is in Judge the expected original value If it does not match the original value, the original value will be recycled and the CAS process will be repeated until the The new value was assigned successfully.
cas is an optimistic locking idea, and it is a non-blocking lightweight optimistic lock. Non-blocking refers to the failure or failure of a thread. Suspending should not affect the failure of other threads or the suspended algorithm.
Solve the ABA problem (if the value is to consider the ending, you can ignore the problem without considering the process)
java learning tutorial"
The above is the detailed content of Learn more about CAS in java. For more information, please follow other related articles on the PHP Chinese website!