Existe uma maneira simples de dizer quais tarefas um executor da Java está executando em um determinado momento?

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

Pergunta

Tenho certeza de que poderia invadir algo que me permitiria descobrir isso, mas espero que haja uma solução pronta para uso. Eu li os documentos, mas não vi nada.

Meu aplicativo específico está usando um ThreadPoolExecutor apoiado por a DelayQueue, embora eu não tenha certeza de que isso importa.

Obrigado!

Foi útil?

Solução

Eu não acho que exista uma maneira confiável de fazer isso. Se você deseja contagens, existem métodos disponíveis (getTaskCount ()/getCompletedTaskCount ()) que ajudam. Se você precisar das tarefas reais, o AFAIK precisará manualmente para acompanhar as tarefas, substituindo antes deexecute () e apósexecute () é uma maneira.

Outras dicas

Uma abordagem simples: embrulhe suas tarefas com código que chamará o início da sinalização de retorno de chamada de nova tarefa, passando todos os dados que você deseja:

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

Você realmente precisa saber no tempo de execução ou apenas para depuração?

Se você estiver apenas depurando, considere dar uma olhada no aplicativo JVisualVM (instalado no diretório 'bin' do JDK). Permite inspecionar dinamicamente todos os threads em execução, para que possa fornecer algumas dicas.

(O JVisualVM também pode executar o perfil de CPU/memória, com pontos de execução e alocação, e mostra a atividade de coleta de lixo em tempo real.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top