美文网首页Java基础
Java基础复习 CAS

Java基础复习 CAS

作者: pj0579 | 来源:发表于2019-09-25 13:50 被阅读0次

synchronized是一个悲观锁的例子,认为线程并发严重,操作上锁,直到释放锁的时候别的线程才会释放资源。

CAS操作是一个乐观锁的例子,不上锁,会不断尝试更新。
内存地址V,旧的预期值A,要修改的新值B。
CAS操作有三个操作数 A(预期旧值) V(内存地址) B(修改后的新值)
拿 count = 10 自增做例子(真正的CAS操作需要把变量设置为volatile保证可见性)

线程A
内存地址 V = 0xxxxx;
A = 10;
B =11;
这个时候另外一个线程B操作的修改完了内存地址V的值为11
比较V的值和A不同
放弃这次操作,开始重试,获取内存地址V,更新
A=11;
B=12;
比较内存V的值和A相同,进行操作

缺点:
只能保证一个共享变量原子性。
长期更新不成功比较耗费资源。
ABA问题(可以使用AtomicStampedReference解决)

相关文章

  • Java基础复习 CAS

    synchronized是一个悲观锁的例子,认为线程并发严重,操作上锁,直到释放锁的时候别的线程才会释放资源。 C...

  • Unsafe 与 LockSupport

    1.Unsafe java concurrent 包的基础是CAS, 而进行CAS操作的就是这个 Unsafe类....

  • 技术栈

    技术栈 Java Web 并发基础 [ ] CopyOnWrite [ ] 线程池 [ ] CAS [ ] AQS...

  • ABA问题的本质及其解决办法

    简介 CAS的全称是compare and swap,它是java同步类的基础,java.util.concurr...

  • 2018-06-05

    java基础 cas自旋-基于内存值的判断 基于CAS操作的变量必须声明为Volatile类型,这样多线程操作,能...

  • CAS ABA问题

    java.util.concurrent包的最底层基础CAS技术,原理很简单。 CAS有3个操作数,内存值V,旧的...

  • AtomicInteger 源码

    基础介绍 将内存值V修改为B,否则什么都不做。 CAS操作 CAS通过调用JNI的代码实现的。JNI:Java N...

  • java并发编程笔记目录

    随缘记录~~ java并行程序基础 线程安全、volatile和CAS https://www.jianshu.c...

  • java基础:java CAS操作

    什么是悲观锁、乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽...

  • Java concurrent包源码走读(一)

    为了更好的走读Java concurrent包源码,首先普及下基础知识:volatile、CAS、LockSupp...

网友评论

    本文标题:Java基础复习 CAS

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