Warum führt der parallele Stream mit Lambda im statischen Initialisierer zu einem Deadlock?

Ich bin auf eine seltsame Situation gestoßen, in der die Verwendung eines parallelen Streams mit einem Lambda in einem statischen Initialisierer scheinbar für immer dauert, ohne dass die CPU ausgelastet ist. Hier ist der Code:

class Deadlock {
    static {
        IntStream.range(0, 10000).parallel().map(i -> i).count();
        System.out.println("done");
    }
    public static void main(final String[] args) {}
}

Dies scheint ein minimaler Testfall für die Reproduktion dieses Verhaltens zu sein. Wenn ich

Geben Sie den Block in der Hauptmethode anstelle eines statischen Initialisierers ein. Parallelisierung entfernen oderLambda entfernen,

Der Code wird sofort vervollständigt. Kann jemand dieses Verhalten erklären? Ist es ein Fehler oder ist dies beabsichtigt?

Ich verwende OpenJDK Version 1.8.0_66-internal.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage