Gibt es eine einfache Möglichkeit zu sagen, welche Aufgaben ein Java Executor zu einem bestimmten Zeitpunkt ausgeführt wird?

StackOverflow https://stackoverflow.com/questions/4609641

Frage

Ich bin sicher, ich könnte etwas zusammen hacken, die mir ermöglichen würde, um dies herauszufinden, aber ich hoffe, es gibt eine out-of-the-Box-Lösung, die ich gerade bin fehlt. Ich lese die Dokumentation, aber ich habe nichts gesehen.

Meine spezifischen App wird mit einem ThreadPoolExecutor von einem DelayQueue gesichert, obwohl ich bin mir nicht sicher, dass Angelegenheiten.

Danke!

War es hilfreich?

Lösung

Ich glaube nicht, dass es eine zuverlässige Möglichkeit, dies zu tun. Wenn Sie zählen wollen, gibt es Methoden zur Verfügung (getTaskCount () / getCompletedTaskCount ()), die Hilfe. Wenn Sie die eigentlichen Aufgaben müssen dann AFAIK müssen Sie manuell den Überblick über die Aufgaben zu halten, durch zwingende BeforeExecute () und AfterExecute () ist eine Möglichkeit.

Andere Tipps

Ein einfacher Ansatz: wickeln Sie Ihre Aufgaben mit Code, der Rückruf ruft Start neuer Aufgabe signalisiert, entlang aller Daten geben Sie es wollen:

interface StartTaskWatcher {
    void taskStarted(Object data);
}

class StartTaskSignalingWrapper implements Runnable {
    private final Runnable task;
    private final String taskDescription;
    private final StartTaskWatcher startTaskWatcher;

    StartTaskSignalingWrapper(Runnable task, String taskDescription, StartTaskWatcher startTaskWatcher) {
        this.task = task;
        this.taskDescription = taskDescription;
        this.startTaskWatcher = startTaskWatcher;
    }

    public void run() {
        startTaskWatcher.taskStarted(taskDescription);
        task.run();
    }
}

Haben Sie tatsächlich zur Laufzeit müssen wissen, oder einfach nur für das Debuggen?

Wenn Sie nur das Debuggen, sollten einen Blick auf die jvisualvm Anwendung (installiert im Verzeichnis ‚bin‘ des JDK). Damit können Sie alle laufenden Threads dynamisch kontrollieren, so sollte es in der Lage sein, um Ihnen einen Einblick.

(Der jvisualvm kann auch CPU / Memory Profilierung durchführt, mit der Ausführung und Zuordnung Hotspots und zeigt Garbage Collection-Aktivität in Echtzeit.)

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