上面那段构造函数的代码,我主要想看这里:
//initialize workers array with room for 2*parallelism if possible
int n = parallelism << 1;
if (n >= MAX_ID)
n = MAX_ID;
else { // See Hackers Delight, sec 3.2, where n < (1 << 16)
n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8;
}
workers = new ForkJoinWorkerThread[n + 1];
这个并行化级别首先左移了1位,其实就是乘2了。源代码中有注释啊…尽量是2倍的线程数量。但是线程再多,也不能多过这个数:
private static final int MAX_ID = 0x7fff; // max poolIndex
到这里可以看出ForkJoinPool的初始化就干了2个事情:
初始化了一个线程池ForkJoinWorkerThread[parallelism..]
初始化了一个任务队列submissionQueue[8]。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40528-3.html
竟然还能当教授
如同2楼这种贪生怕死的人多半会是汉奸
让所谓盟国有底气来对抗中国