- // 逐一复制 parentMap 的记录
- for (int j = 0; j <len; j++) {
- Entry e = parentTable[j];
- if (e != null) {
- @SuppressWarnings("unchecked")
- ThreadLocal<Object> key = (ThreadLocal<Object>) e.get();
- if (key != null) {
- // 可能会有同学好奇此处为何使用 childValue, 而不是直接赋值,
- // 毕竟 childValue 内部也是直接将 e.value 返回;
- // 个人理解, 主要为了减轻阅读代码的难度
- Object value = key.childValue(e.value);
- Entry c = new Entry(key, value);
- int h = key.threadLocalHashCode & (len - 1);
- while (table[h] != null)
- h = nextIndex(h, len);
- table[h] = c;
- size++;
- }
- }
- }
- }
来源: http://www.bubuko.com/infodetail-3301351.html