Я столкнулся с странной ситуацией, когда использование параллельного потока с лямбдой в статическом инициализаторе, кажется, навсегда, без использования ЦП. Здесь код:
class Deadlock {
static {
IntStream.range(0, 10000).parallel().map(i -> i).count();
System.out.println("done");
}
public static void main(final String[] args) {}
}
Это, по-видимому, минимальный тестовый пример воспроизведения для этого поведения. Если I:
- помещает блок в основной метод вместо статического инициализатора,
- удалить распараллеливание или
- удалите лямбда,
код моментально завершается. Может ли кто-нибудь объяснить это поведение? Это ошибка или это предназначено?
Я использую OpenJDK версии 1.8.0_66-internal.