JAVA并发容器源码分析【二】ConcurrentHashMap分析之初始化
JDK8的ConcurrentHashMap的初始化源码及注释:
java
1 | /** |
由源码可知:初始化的代码比较简单,通过初始化数组,之后将sizeCtl赋值。
这里涉及到的知识点:
- Thread.yield():使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。
- U.compareAndSwapInt(this, SIZECTL, sc, -1)和SIZECTL = U.objectFieldOffset(k.getDeclaredField(“sizeCtl”)):通过反射获取sizeCtl,再通过CAS设置其值。
- sc = n - (n >>> 2):其实就是 0.75 * n,扩容阈值。
这个方法并发通过对SIZECTL+CAS实现。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!