¿Hay una manera fácil de decir qué tareas que un ejecutor de Java se está ejecutando en un momento dado?

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

Pregunta

Estoy seguro de que podría hackear algo juntos, lo que me permitiría resolver esto, pero estoy esperando que hay una solución fuera de la caja sólo estoy perdido. He leído los documentos, pero no vi nada.

Mi aplicación específica está utilizando un ThreadPoolExecutor respaldado por una DelayQueue, aunque no estoy seguro de lo que importa.

Gracias!

¿Fue útil?

Solución

No creo que hay una manera confiable de hacer esto. Si quieres recuentos hay métodos disponibles (getTaskCount () / getCompletedTaskCount ()) que ayuda. Si necesita las tareas reales, entonces yo sepa lo que necesita de forma manual para realizar un seguimiento de las tareas, anulando BeforeExecute () y afterExecute () es una forma.

Otros consejos

Un enfoque simple: envolver sus tareas con el código que va a llamar de devolución de llamada de inicio de la nueva tarea de señalización, que pasa a lo largo de todos los datos que se desea 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();
    }
}

es lo que realmente necesita saber en tiempo de ejecución, o simplemente para depurar?

Si acaba de depuración, considere la posibilidad de echar un vistazo a la aplicación jvisualvm (instalado en el directorio 'bin' del JDK). Se le permite inspeccionar todos los subprocesos que se ejecutan de forma dinámica, por lo que debe ser capaz de proporcionarle una cierta penetración.

(El jvisualvm puede también realizar perfiles de CPU / memoria, con la ejecución y asignación zonas activas y actividad de recolección de muestra de basura en tiempo real.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top