Skip to content

Commit 2bb1d62

Browse files
committed
Update Java Note
1 parent 47f25d9 commit 2bb1d62

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

DB.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7416,7 +7416,7 @@ InnoDB 加锁的基本单位是 next-key lock,该锁是行锁和 gap lock 的
74167416
* 范围查询无论是否是唯一索引,都需要访问到不满足条件的第一个值为止
74177417
* 对于联合索引且是唯一索引,如果 where 条件只包括联合索引的一部分,那么会加间隙锁
74187418

7419-
间隙锁优点:RR 级别下间隙锁可以解决事务的一部分的**幻读问题**,通过对间隙加锁,可以防止读取过程中数据条目发生变化。一部分的意思是不会对全部间隙加锁,只能加锁一部分的间隙
7419+
间隙锁优点:RR 级别下间隙锁可以**解决事务的一部分的幻读问题**,通过对间隙加锁,可以防止读取过程中数据条目发生变化。一部分的意思是不会对全部间隙加锁,只能加锁一部分的间隙
74207420

74217421
间隙锁危害:
74227422

Prog.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2921,7 +2921,7 @@ CAS 特点:
29212921

29222922
CAS 缺点:
29232923

2924-
- 循环时间长,开销大,因为执行的是循环操作,如果比较不成功一直在循环,最差的情况某个线程一直取到的值和预期值都不一样,就会无限循环导致饥饿,**使用 CAS 线程数不要超过 CPU 的核心数**
2924+
- 执行的是循环操作,如果比较不成功一直在循环,最差的情况某个线程一直取到的值和预期值都不一样,就会无限循环导致饥饿,**使用 CAS 线程数不要超过 CPU 的核心数**,采用分段 CAS 和自动迁移机制
29252925
- 只能保证一个共享变量的原子操作
29262926
- 对于一个共享变量执行操作时,可以通过循环 CAS 的方式来保证原子操作
29272927
- 对于多个共享变量操作时,循环 CAS 就无法保证操作的原子性,这个时候**只能用锁来保证原子性**
@@ -3470,7 +3470,7 @@ ABA 问题:当进行获取主内存值时,该内存值在写入主内存时
34703470
* `public AtomicStampedReference(V initialRef, int initialStamp)`:初始值和初始版本号
34713471

34723472
* 常用API:
3473-
* ` public boolean compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)`:期望引用和期望版本号都一致才进行 CAS 修改数据
3473+
* ` public boolean compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)`:**期望引用和期望版本号都一致**才进行 CAS 修改数据
34743474
* `public void set(V newReference, int newStamp)`:设置值和版本号
34753475
* `public V getReference()`:返回引用的值
34763476
* `public int getStamp()`:返回当前版本号

0 commit comments

Comments
 (0)