Por qué usar flujos paralelos en el inicializador estático conduce a un punto muerto no estable

PRECAUCIÓN no es un duplicado, lea el tema сarefully https: //stackoverflow.com/users/3448419/apangi cita:

La verdadera pregunta es por qué el código a veces funciona cuando no debería. El tema se reproduce incluso sin lambdas. Esto me hace pensar que podría haber un error de JVM.

En los comentarios dehttps: //stackoverflow.com/a/53709217/267430 Traté de averiguar las razones por las cuales el código se comporta de manera diferente de un comienzo a otro y los participantes de esa discusión me dieron un consejo para crear un tema separado.

No consideremos el siguiente código fuente:

public class Test {
    static {
        System.out.println("static initializer: " + Thread.currentThread().getName());

        final long SUM = IntStream.range(0, 5)
                .parallel()
                .mapToObj(i -> {
                    System.out.println("map: " + Thread.currentThread().getName() + " " + i);
                    return i;
                })
                .sum();
    }

    public static void main(String[] args) {
        System.out.println("Finished");
    }
}

A veces (casi siempre) conduce a un punto muerto.

Ejemplo de salida:

static initializer: main
map: main 2
map: ForkJoinPool.commonPool-worker-3 4
map: ForkJoinPool.commonPool-worker-3 3
map: ForkJoinPool.commonPool-worker-2 0

Pero a veces termina con éxito (muy raro):

static initializer: main
map: main 2
map: main 3
map: ForkJoinPool.commonPool-worker-2 4
map: ForkJoinPool.commonPool-worker-1 1
map: ForkJoinPool.commonPool-worker-3 0
Finished

static initializer: main
map: main 2
map: ForkJoinPool.commonPool-worker-2 0
map: ForkJoinPool.commonPool-worker-1 1
map: ForkJoinPool.commonPool-worker-3 4
map: main 3

¿Podrías explicar ese comportamiento?

Respuestas a la pregunta(1)

Su respuesta a la pregunta