- 在
ForkJoinPool源码阅读的过程中发现了以下代码 - 该代码出现在第一个任务提交后,初始化池子的
WorkQueues
n = 8;// cpu个数
n |= n >>> 1; n |= n >>> 2; n |= n >>> 4;
n |= n >>> 8; n |= n >>> 16; n = (n + 1) << 1;
- 第一眼看起来这代码在这突突啥,在纸上画一画这些操作。
- 最后得出
n=32 - 该算法是得出的结果是2的整数幂
很多集合初始化容量的时候用到了这个算法,比如:HashMap
- 引申出为什么HashMap的容量必须为2的整数幂