Java: el código multiproceso no se ejecuta más rápido en más núcleos

Solo estaba ejecutando un código multiproceso en una máquina de 4 núcleos con la esperanza de que fuera más rápido que en una máquina de un solo núcleo. Aquí está la idea: obtuve un número fijo de hilos (en mi caso un hilo por núcleo). Cada hilo ejecuta unaRunnable de la forma

private static int[] data; // data shared across all threads


public void run() {

    int i = 0;

    while (i++ < 5000) {

        // do some work
        for (int j = 0; j < 10000 / numberOfThreads) {
            // each thread performs calculations and reads from and
            // writes to a different part of the data array
        }

        // wait for the other threads
        barrier.await();
    }
}

En una máquina quadcore, este código realizapeo con 4 hilos que con 1 hilo. Incluso con laCyclicBarrierobrecarga de @, hubiera pensado que el código debería funcionar al menos 2 veces más rápido. ¿Por qué se ejecutamás lent?

EDIT: He intentado una implementación de espera ocupada. Desafortunadamente, hace que el programa funcione más lento en más núcleos (también se discute en una pregunta separadaaqu):

public void run() {

    // do work

    synchronized (this) {

        if (atomicInt.decrementAndGet() == 0) {

            atomicInt.set(numberOfOperations);

            for (int i = 0; i < threads.length; i++)
                threads[i].interrupt();
        }
    }

    while (!Thread.interrupted()) {}
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta