Как получить идентификатор потока от пула потоков?

У меня есть фиксированный пул потоков, что я отправляю задачи (ограниченный 5 потоками). Как я могу узнать, какой из тех 5 потоков выполняет мою задачу (что-то как "поток № 3 5 делает эту задачу")?

ExecutorService taskExecutor = Executors.newFixedThreadPool(5);

//in infinite loop:
taskExecutor.execute(new MyTask());
....

private class MyTask implements Runnable {
    public void run() {
        logger.debug("Thread # XXX is doing this task");//how to get thread id?
    }
}
127
задан Mridang Agarwalla 18 April 2016 в 13:39
поделиться

3 ответа

Использование Thread.currentThread () :

private class MyTask implements Runnable {
    public void run() {
        long threadId = Thread.currentThread().getId();
        logger.debug("Thread # " + threadId + " is doing this task");
    }
}
219
ответ дан 24 November 2019 в 00:45
поделиться

Вы можете использовать Thread.getCurrentThread.getId(), но зачем вам это делать, если объекты LogRecord, управляемые регистратором, уже имеют Id потока. Я думаю, что вы где-то упустили конфигурацию, которая регистрирует идентификаторы потоков для ваших сообщений журнала.

6
ответ дан 24 November 2019 в 00:45
поделиться

Если ваш класс наследуется от Thread , вы можете использовать методы getName и setName для именования каждого потока. В противном случае вы можете просто добавить поле name в MyTask и инициализировать его в своем конструкторе.

1
ответ дан 24 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: