C'è un modo semplice per dire a quali compiti un Esecutore Java è in esecuzione in un dato momento?

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

Domanda

Sono sicuro che avrei potuto incidere qualcosa insieme che mi avrebbe permesso di capire questo, ma spero ci sia una soluzione out-of-the-box mi manca solo. Ho letto i documenti, ma non ho visto nulla.

La mia specifica applicazione sta usando una ThreadPoolExecutor sostenuta da un DelayQueue, anche se non sono sicuro che le cose.

Grazie!

È stato utile?

Soluzione

Non credo ci sia un modo affidabile per fare questo. Se si desidera che conta ci sono metodi disponibili (getTaskCount () / getCompletedTaskCount ()), che di aiuto. Se avete bisogno i compiti effettivi poi per quanto ne so è necessario manualmente per tenere traccia delle attività, sovrascrivendo BeforeExecute () e afterExecute () è un modo.

Altri suggerimenti

Un approccio semplice: avvolgere le attività con il codice che chiamerà callback inizio di nuova attività di segnalazione, passando lungo tutti i dati che si vuole a:

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();
    }
}

Avete veramente bisogno di sapere in fase di esecuzione, o semplicemente per il debug?

Se sei solo il debug, prendere in considerazione uno sguardo alla applicazione jvisualvm (installata nella directory 'bin' del JDK). Esso consente di ispezionare in modo dinamico tutti i thread in esecuzione, quindi dovrebbe essere in grado di fornire con una certa comprensione.

(La jvisualvm può anche eseguire CPU / memoria profilatura, con esecuzione e assegnazione hotspot, e l'attività di raccolta spettacoli rifiuti in tempo reale.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top