From 8a28d7905ad11ecb86912066c3d1463aa9a6030b Mon Sep 17 00:00:00 2001 From: smy1999 <865988027@qq.com> Date: Thu, 7 Mar 2024 09:31:02 +0800 Subject: [PATCH] Fix issues with optimistic locking. --- docs/java/concurrent/java-concurrent-questions-02.md | 4 ++-- .../java/concurrent/optimistic-lock-and-pessimistic-lock.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/java/concurrent/java-concurrent-questions-02.md b/docs/java/concurrent/java-concurrent-questions-02.md index c5eff952..9fe955a4 100644 --- a/docs/java/concurrent/java-concurrent-questions-02.md +++ b/docs/java/concurrent/java-concurrent-questions-02.md @@ -285,9 +285,9 @@ public final native boolean compareAndSwapLong(Object o, long offset, long expec 关于 `Unsafe` 类的详细介绍可以看这篇文章:[Java 魔法类 Unsafe 详解 - JavaGuide - 2022](https://javaguide.cn/java/basis/unsafe.html) 。 -### 乐观锁存在哪些问题? +### CAS 算法存在哪些问题? -ABA 问题是乐观锁最常见的问题。 +ABA 问题是 CAS 算法最常见的问题。 #### ABA 问题 diff --git a/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md b/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md index 022a9458..5cb97986 100644 --- a/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md +++ b/docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md @@ -122,9 +122,9 @@ public final native boolean compareAndSwapLong(Object o, long offset, long expec 关于 `Unsafe` 类的详细介绍可以看这篇文章:[Java 魔法类 Unsafe 详解 - JavaGuide - 2022](https://javaguide.cn/java/basis/unsafe.html) 。 -## 乐观锁存在哪些问题? +## CAS 算法存在哪些问题? -ABA 问题是乐观锁最常见的问题。 +ABA 问题是 CAS 算法最常见的问题。 ### ABA 问题 @@ -165,7 +165,7 @@ CAS 只对单个共享变量有效,当操作涉及跨多个共享变量时 CAS - 高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。并且,悲观锁还可能会存在死锁问题,影响代码的正常运行。乐观锁相比悲观锁来说,不存在锁竞争造成线程阻塞,也不会有死锁的问题,在性能上往往会更胜一筹。不过,如果冲突频繁发生(写占比非常多的情况),会频繁失败和重试,这样同样会非常影响性能,导致 CPU 飙升。 - 乐观锁一般会使用版本号机制或 CAS 算法实现,CAS 算法相对来说更多一些,这里需要格外注意。 - CAS 的全称是 **Compare And Swap(比较与交换)** ,用于实现乐观锁,被广泛应用于各大框架中。CAS 的思想很简单,就是用一个预期值和要更新的变量值进行比较,两值相等才会进行更新。 -- 乐观锁的问题:ABA 问题、循环时间长开销大、只能保证一个共享变量的原子操作。 +- CAS 算法的问题:ABA 问题、循环时间长开销大、只能保证一个共享变量的原子操作。 ## 参考