У меня есть фиксированный пул потоков, что я отправляю задачи (ограниченный 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?
}
}
Использование Thread.currentThread ()
:
private class MyTask implements Runnable {
public void run() {
long threadId = Thread.currentThread().getId();
logger.debug("Thread # " + threadId + " is doing this task");
}
}
Вы можете использовать Thread.getCurrentThread.getId(), но зачем вам это делать, если объекты LogRecord, управляемые регистратором, уже имеют Id потока. Я думаю, что вы где-то упустили конфигурацию, которая регистрирует идентификаторы потоков для ваших сообщений журнала.
Если ваш класс наследуется от Thread , вы можете использовать методы getName
и setName
для именования каждого потока. В противном случае вы можете просто добавить поле name
в MyTask
и инициализировать его в своем конструкторе.