Frage

Ich habe Code zur Zeit, die die folgenden:

private final static ExecutorService pool = Executors.newCachedThreadPool();
public void foo(){
    FutureTask<MyObject> first_task = createFutureTask();
    FutureTask<MyObject> second_task = createFutureTask();
    ...

    pool.execute(first_task);
    pool.execute(second_task);
    ....
    first_task.get();
    second_task.get();
    ...
    System.out.println(time taken);
}

Das Problem, das ich habe ist, dass ich jede der Zukunft Aufgabe bekommen, die Zeit nehmen sie zu drucken, wenn die Berechnung zu tun, so zum Beispiel auf der Konsole Ich werde sehen,

first_task : 20000ms
second_task : 18000ms
...

aber die Gesamtzeit (System.out.println(time taken)) ist viel größer als die längste Zeit von jeder künftigen Aufgabe gemacht, also im Einklang mit diesem Beispiel wird das Verfahren etwa 1 Minute dauern, tun würde (im Vergleich zu den 20er Jahren des first_task).

Ich habe den Eindruck, dass diese zukünftigen Aufgaben parallel laufen, aber aus den Zeiten scheint es, als ob sie ausgeführt werden, der einer nach dem anderen. Bin ich mit dieser API korrekt?

War es hilfreich?

Lösung

Sie verwenden die API korrekt, aber bedenken Sie, dass jede Aufgabe läuft in einem separaten Thread, kein separater Prozess (und somit nicht unbedingt parallel).

Jeder Thread würde auf einem separaten CPU-Kern laufen, um tatsächlich zur gleichen Zeit ausgeführt werden. Unabhängig davon, ob dies möglich ist, hängt von Ihrer Maschine, ihre Stromlast, und wie die JVM und OS sind in der Lage, die Fäden über Kern zu planen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top