Как отслеживать состояние всех потоков, созданных службой исполнителя - PullRequest
0 голосов
/ 26 мая 2020

Есть ли способ проверить состояние всех потоков, созданных службой исполнителя. Допустим, у меня 20 потоков. Как мне проверить статус всех?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вы можете расширить ThreadPoolExecutor и использовать его методы beforeExecute(Thread t, Runnable r) и afterExecute(Runnable r, Throwable t) для отслеживания состояния задач / потоков.

Вы можете найти пример реализации в этой статье

1 голос
/ 26 мая 2020

Если вы действительно хотите отслеживать статус всех потоков в пуле потоков, вы можете попробовать создать ThreadFactory, как показано ниже:

public class SelfThreadFactory implements ThreadFactory {
    private Map<Long, Thread> stateMap = new ConcurrentHashMap<>();

    @Override
    public Thread newThread(Runnable r) {
        Thread thread = new Thread(r);
        stateMap.put(thread.getId(), thread);
        return thread;
    }

    public Map<Long, Thread> getStateMap() {
        return stateMap;
    }
}

Используйте метод getStateMap (), вы можете получить весь поток, созданный этим ThreadFactory, тогда вы можете получить состояние потока.

...