Есть ли простой способ сказать, какие задачи выполняет Java Executor в данный момент? - PullRequest
3 голосов
/ 06 января 2011

Я уверен, что мог бы взломать что-то вместе, что позволило бы мне это выяснить, но я надеюсь, что есть нестандартное решение, которое я просто пропускаю.Я прочитал документы, но ничего не увидел.

Мое конкретное приложение использует ThreadPoolExecutor с поддержкой DelayQueue, хотя я не уверен, что это важно.

Спасибо!

Ответы [ 3 ]

10 голосов
/ 06 января 2011

Один простой подход: оберните ваши задачи кодом, который будет вызывать обратный вызов, сигнализирующий о начале новой задачи, передавая все данные, которые вам понадобятся:

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();
    }
}
6 голосов
/ 06 января 2011

Я не думаю, что есть надежный способ сделать это. Если вы хотите рассчитывать, есть доступные методы (getTaskCount () / getCompletedTaskCount ()), которые помогают. Если вам нужны реальные задачи, то AFAIK вам нужно вручную отслеживать задачи, переопределение beforeExecute () и afterExecute () - это один из способов.

1 голос
/ 06 января 2011

Вам действительно нужно знать во время выполнения или просто для отладки?

Если вы просто отлаживаете, подумайте о том, чтобы взглянуть на приложение JVisualVM (установленное в каталоге 'bin' JDK). Он позволяет вам динамически проверять все запущенные потоки, поэтому он должен предоставить вам некоторую информацию.

(JVisualVM также может выполнять профилирование процессора / памяти, с точками выполнения и выделением ресурсов и отображать действия по сбору мусора в реальном времени.)

...