为什么在静态初始值设定项中使用 lambda 的并行流会导致死锁?
我遇到了一个奇怪的情况,在静态初始值设定项中使用带有lambda的并行流似乎永远没有CPU利用率。代码如下:
class Deadlock {
static {
IntStream.range(0, 10000).parallel().map(i -> i).count();
System.out.println("done");
}
public static void main(final String[] args) {}
}
这似乎是此行为的最小重现测试用例。如果我:
- 将块放在 main 方法中,而不是静态初始值设定项中,
- 删除并行化,或
- 删除 lambda,
代码立即完成。任何人都可以解释这种行为吗?这是一个错误还是有意为之?
我正在使用OpenJDK版本1.8.0_66-内部。