File tree Expand file tree Collapse file tree 1 file changed +5
-4
lines changed Expand file tree Collapse file tree 1 file changed +5
-4
lines changed Original file line number Diff line number Diff line change @@ -398,9 +398,10 @@ put() 的流程:
398398
399399扩容的过程:
4004001 . 将数组扩容成原数组的两倍
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
405406Set:
406407- HashSet: 乱序,基于HashMap实现
@@ -539,7 +540,7 @@ submit() 和 execute() 的区别:submit() 内部仍然是调用 execute() 方
539540
5405414 . 公平锁,非公平锁:
541542- 公平锁,每个线程获取锁的顺序是按照线程访问锁的先后顺序获取的。
542- - 非公平锁,每个线程获取锁的顺序是随机的,并不会遵循先来先得的规则,所有线程会竞争获取锁 。
543+ - 非公平锁,线程获取锁时并不会遵循先来先得的规则,可以插队(并不是随意的插队,而是在合适的时机插队)。当后到的线程请求锁时,该锁恰好被释放,则该锁被后到的线程拥有 。
543544
5445455 . 可重入锁(递归锁),非可重入锁:ReentrantLock和synchronized都是可重入锁,** NonReentrantLock是非可重入锁**
545546- 可重入锁,指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法可以再次获取锁(前提锁对象得是同一个对象或者class),不会因为之前已经获取过还没释放而阻塞。好处是避免死锁。
You can’t perform that action at this time.
0 commit comments