Skip to content

Commit b8b1334

Browse files
Update 2022-06-21-java.md
1 parent e6a9412 commit b8b1334

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

_posts/2022-06-21-java.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,10 @@ put() 的流程:
398398

399399
扩容的过程:
400400
1. 将数组扩容成原数组的两倍
401-
2. 重新计算下标,将原 hash 值与 **新数组长度减一**(类似于 put 操作的第二步) 进行“与”操作
402-
3. 如果高位结果是0,桶位置不变
403-
4. 如果高位结果是1,桶位置是原位置 + 扩容长度
401+
2. 如果没有哈希冲突的节点,使用 `e.hash&(newCap - 1)` 计算新的桶位置
402+
3. 如果是链表,使用 `e.hash&oldCap` 并且判断是否等于零(本质上判断最高位结果是否为零,例如原 hash 值为)
403+
1. 如果最高位结果是0,桶位置不变
404+
2. 如果最高位结果是1,桶位置是原位置 + 扩容长度
404405

405406
Set:
406407
- HashSet: 乱序,基于HashMap实现
@@ -539,7 +540,7 @@ submit() 和 execute() 的区别:submit() 内部仍然是调用 execute() 方
539540

540541
4. 公平锁,非公平锁:
541542
- 公平锁,每个线程获取锁的顺序是按照线程访问锁的先后顺序获取的。
542-
- 非公平锁,每个线程获取锁的顺序是随机的,并不会遵循先来先得的规则,所有线程会竞争获取锁
543+
- 非公平锁,线程获取锁时并不会遵循先来先得的规则,可以插队(并不是随意的插队,而是在合适的时机插队)。当后到的线程请求锁时,该锁恰好被释放,则该锁被后到的线程拥有
543544

544545
5. 可重入锁(递归锁),非可重入锁:ReentrantLock和synchronized都是可重入锁,**NonReentrantLock是非可重入锁**
545546
- 可重入锁,指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法可以再次获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞。好处是避免死锁。

0 commit comments

Comments
 (0)