美文网首页
并发编程 CAS(一)

并发编程 CAS(一)

作者: 进击的三文鱼 | 来源:发表于2021-03-07 20:39 被阅读0次

一谈到并发编程,就会遇到各种概念,为什么会这么多概念呢,因为并发编程中的东西,是更贴近底层的东西,而底层很多都是java通过native去调用的,所以,并发编程一定是很多概念的东西,因为他里面很多的知识都是通过包装的API来进行调用的,这样就无法从表面上了解其原理,下面就说说并发编程的CAS

先看下CAS中的方法

/**

  • Atomically sets synchronization state to the given updated
  • value if the current state value equals the expected value.
  • This operation has memory semantics of a {@code volatile} read
  • and write.
  • @param expect the expected value
  • @param update the new value
  • @return {@code true} if successful. False return indicates that the actual
  •     value was not equal to the expected value.
    

*/
protected final boolean compareAndSetState(int expect, int update) {
// See below for intrinsics setup to support this
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
我们看到CAS其实他是委托unsafe来处理的,这个方法的意思就是他是原子性的 并且他是把当前的值和内存中的值进行比较如果和内存中的值相同的化,那么就可以进行读和写,那分析以下几点

1. Unsafe 类的作用

他的作用通过获取内存中对象的偏移量来确定对象的值

stateOffset = unsafe.objectFieldOffset
(AbstractQueuedSynchronizer.class.getDeclaredField("state"));
这段代码就是他进行获取的过程

 顺便说说,正常jvm如果要操作系统,那么是通过native进行了,但是unsafe不通,他是jvm直接操作操作系统的,所以是硬件级别的,很快

2 对CAS的理解

   这个在源码中方法的注释上已经说明了,其实CAS是一个简写,全名是Compare and Swap意思是比较并转换。

  3 什么是ABA问题

   就是,如果我们通过CAS来判断一个变量有没有修改过,会存在不准确的情况,比如A值,被修改成B值,然后又被修改成A值,我们用CAS去判断,入参是A,期望值也是A,那么就会误以为,他没有被修改过,这是存在问题的,解决这个问题,最好还是通过锁来实现。

4 CAS的实现有什么

   AtomicInteger类,这其中也有用到volitate。

相关文章

  • CAS乐观锁

    什么是CAS CAS比较并替换,是一种并发编程中用到的一种技术。 CAS是原子性,保证并发安全,而不是保证并发同步...

  • JAVA并发编程学习笔记之CAS操作

    JAVA并发编程学习笔记之CAS操作 CAS操作 CAS是单词compare and set的缩写,意思是指在se...

  • 并发编程 CAS(一)

    一谈到并发编程,就会遇到各种概念,为什么会这么多概念呢,因为并发编程中的东西,是更贴近底层的东西,而底层很多都是j...

  • 并发编程-CAS

    Java并发编程中,除了通过synchronized进行并发控制外,还可以通过CAS(Compare And Se...

  • Java并发编程

    一、Java并发编程的挑战 1.1 如何减少上下文切换? 无锁并发编程: CAS算法:Java的Atomic包使用...

  • Java并发编程(一)CAS

    CAS 是什么 CAS 的全称 Compare-And-Swap,它是一条 CPU 并发。 它的功能是判断内存某一...

  • (转载)Java并发编程-并发包中的原子操作类(Atomic系列

    原文链接:Java并发编程-无锁CAS与Unsafe类及其并发包Atomic - CSDN博客 通过前面的分析我们...

  • (转载)Java并发编程-无锁CAS与Unsafe类

    原文链接:Java并发编程-无锁CAS与Unsafe类及其并发包Atomic - CSDN博客 在前面一篇博文中,...

  • 并发编程之CAS

    写在前面 上一篇我们分析了volatile变量对于内存可见性的保证以及抑制指令重排的特性,了解到在多线程对vola...

  • 并发编程(七)CAS

    1.CAS 在AQS的加锁和释放锁阶段,多次使用了一种通用操作:compareAndSetXXX.这种操作最终会调...

网友评论

      本文标题:并发编程 CAS(一)

      本文链接:https://www.haomeiwen.com/subject/qfnyqltx.html