JAVA并发容器源码分析【二】ConcurrentHashMap分析之tabAt-casTabAt-setTabAt
引言
ConcurrentHashMap中有大量的CAS操作,tabAt、casTabAt、setTabAt是用来实现CAS的方法。
在这只是简单的学习了解,不做深层次的学习,比如为啥用sun.misc.Unsafe,绕过JVM优化数组操作之类的。
tabAt
获取数组tab中索引为i的节点。
1 | static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { |
casTabAt
用CAS方法设置数组tab中索引为i的节点的值,如果当前节点与期望的节点c相同,则更新为节点v。
1 | static final <K,V> boolean casTabAt(Node<K,V>[] tab, int i, |
setTabAt
更新 数组tab中索引为i的节点 为 节点v。
1 | static final <K,V> void setTabAt(Node<K,V>[] tab, int i, Node<K,V> v) { |
上面这三个方法都是native方法,依赖于未开源的sun.misc.Unsafe类,这个类太强大了,而且好多都是绕开JVM的方法,以后要好好研究一下。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!