并发

Java并发之原子变量及CAS算法-下篇

Java并发之原子变量及CAS算法-下篇概述本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?。对应Java中的包是:java.util.concurrent.atomic包下。因为涉及到了CAS算法,需要对CAS算法讲解及CAS算法三个问题怎么解决以及和Synchroized比较。文章比较长,所以就分为上下两个篇幅讲解。本文是上篇《Java并发

Java并发之原子变量及CAS算法-下篇


概述

本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?。对应Java中的包是:java.util.concurrent.atomic包下。因为涉及到了CAS算法,需要对CAS算法讲解及CAS算法三个问题怎么解决以及和Synchroized比较。文章比较长,所以就分为上下两个篇幅讲解。本文是上篇《Java并发之原子变量及CAS算法-下篇》

本文是《凯哥分享Java并发编程之J.U.C包讲解》系列教程中的第四篇。如果想系统学习,凯哥(kaigejava)建议从第一篇开始看。

在上一篇中,我们讲解了i++在多线程下变量原子性问题以及怎么解决。在本篇中,我们详细讲解什么是CAS算法?CAS和Synchroized区别是什么?以及CAS算法产生的问题及怎么解决。

CAS简介

什么是CAS算法?

CAS:Compare-And-Swap即比较并交换的意思。

CAS包含了三个操作的数据:

主内存中的变量值:V

预估值(可以理解为原来旧的值):A

更新值(操作后,要更新的值):B

CAS的特点:

当且仅当预估值A=内存值V的时候,才会将V的值更新为B。否则也不操作。

V==A;V=B;

使用CAS算法多线程操作的时候,有且仅有一个线程可以操作成功,其他线程都会操作失败。失败的线程并不会被挂起,而是被告知这次竞争中失败

原创不易,完成人机校验,阅读全文

相关推荐