Est-il un moyen simple de dire quelles sont les tâches Java Exécuteur fonctionne à un moment donné?

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

Question

Je suis sûr que je pourrais pirater quelque chose ensemble, ce qui me permettrait de comprendre cela, mais j'espère qu'il ya un hors-the-box solution que je manque juste. J'ai lu les documents, mais je ne vois rien.

Mon application spécifique utilise un ThreadPoolExecutor soutenu par une DelayQueue, même si je ne suis pas sûr que les questions.

Merci!

Était-ce utile?

La solution

Je ne pense pas qu'il y ait un moyen fiable pour le faire. Si vous voulez compte il existe des méthodes disponibles (getTaskCount () / getCompletedTaskCount ()) qui aide. Si vous avez besoin des tâches réelles alors vous devez manuellement AFAIK de garder une trace des tâches, en remplaçant beforeExecute () et afterExecute () est une façon.

Autres conseils

Une approche simple: enveloppez vos tâches avec le code qui appellera début signalisation rappel de nouvelle tâche, en passant le long de toutes les données que vous voulez à:

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

Avez-vous réellement besoin de savoir lors de l'exécution, ou tout simplement pour le débogage?

Si vous êtes juste débogage, pensez à jeter un oeil à l'application jVisualVM (installé dans le répertoire bin du JDK). Il vous permet d'inspecter dynamiquement tous les threads en cours d'exécution, il devrait donc être en mesure de vous donner un aperçu.

(Le jVisualVM peut également effectuer des CPU / profilage de la mémoire, avec les points chauds d'exécution et l'allocation, et montre une activité de collecte des ordures en temps réel.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top