concurrenthashmap 里 getFirst 函数里的一个问题

2017-03-27 15:57:51 +08:00
 esolve

HashEntry<K,V> More ...getFirst(int hash) { HashEntry<K,V>[] tab = table; return tab[hash & (tab.length - 1)]; }

这里为何要新建一个 tab 变量? 直接

return table[hash & (table.length - 1)]; 有啥问题?

1013 次点击
所在节点    问与答
2 条回复
esolve
2017-03-27 16:19:18 +08:00
HashEntry<K,V> More ...getFirst(int hash) {
HashEntry<K,V>[] tab = table;
return tab[hash & (tab.length - 1)];
}
SoloCompany
2017-03-28 01:29:55 +08:00
因为这是设计给无锁并发线程安全场景的,如果不先赋值给局部变量,两次对 table 的访问可能返回两个不一样的实例

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX