Skip to content

Commit ecbcf26

Browse files
authored
Merge pull request #2312 from smy1999/feat-cas
Fix issues with optimistic locking.
2 parents b3d59c1 + 8a28d79 commit ecbcf26

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

docs/java/concurrent/java-concurrent-questions-02.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,9 @@ public final native boolean compareAndSwapLong(Object o, long offset, long expec
285285

286286
关于 `Unsafe` 类的详细介绍可以看这篇文章:[Java 魔法类 Unsafe 详解 - JavaGuide - 2022](https://javaguide.cn/java/basis/unsafe.html)
287287

288-
### 乐观锁存在哪些问题
288+
### CAS 算法存在哪些问题
289289

290-
ABA 问题是乐观锁最常见的问题
290+
ABA 问题是 CAS 算法最常见的问题
291291

292292
#### ABA 问题
293293

docs/java/concurrent/optimistic-lock-and-pessimistic-lock.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@ public final native boolean compareAndSwapLong(Object o, long offset, long expec
122122

123123
关于 `Unsafe` 类的详细介绍可以看这篇文章:[Java 魔法类 Unsafe 详解 - JavaGuide - 2022](https://javaguide.cn/java/basis/unsafe.html)
124124

125-
## 乐观锁存在哪些问题
125+
## CAS 算法存在哪些问题
126126

127-
ABA 问题是乐观锁最常见的问题
127+
ABA 问题是 CAS 算法最常见的问题
128128

129129
### ABA 问题
130130

@@ -165,7 +165,7 @@ CAS 只对单个共享变量有效,当操作涉及跨多个共享变量时 CAS
165165
- 高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。并且,悲观锁还可能会存在死锁问题,影响代码的正常运行。乐观锁相比悲观锁来说,不存在锁竞争造成线程阻塞,也不会有死锁的问题,在性能上往往会更胜一筹。不过,如果冲突频繁发生(写占比非常多的情况),会频繁失败和重试,这样同样会非常影响性能,导致 CPU 飙升。
166166
- 乐观锁一般会使用版本号机制或 CAS 算法实现,CAS 算法相对来说更多一些,这里需要格外注意。
167167
- CAS 的全称是 **Compare And Swap(比较与交换)** ,用于实现乐观锁,被广泛应用于各大框架中。CAS 的思想很简单,就是用一个预期值和要更新的变量值进行比较,两值相等才会进行更新。
168-
- 乐观锁的问题:ABA 问题、循环时间长开销大、只能保证一个共享变量的原子操作。
168+
- CAS 算法的问题:ABA 问题、循环时间长开销大、只能保证一个共享变量的原子操作。
169169

170170
## 参考
171171

0 commit comments

Comments
 (0)