Tengo un grupo de subprocesos fijo al que envío tareas (limitado a 5 subprocesos). ¿Cómo puedo averiguar cuál de esos 5 hilos ejecuta mi tarea (algo como "el hilo 3 de 5 está haciendo esta tarea")?
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?
}
}
% numThreads
en su lugargetId()
es14291
dondegetName()
le dapool-29-thread-7
, lo que diría que es más útil.La respuesta aceptada responde a la pregunta sobre cómo obtener una identificación de hilo, pero no le permite hacer mensajes de "Hilo X de Y". Los ID de subproceso son únicos en todos los subprocesos, pero no necesariamente comienzan desde 0 o 1.
Aquí hay un ejemplo que coincide con la pregunta:
y la salida:
Un ligero ajuste utilizando el módulo aritmético le permitirá hacer "hilo X de Y" correctamente:
Nuevos resultados:
fuente
Puede usar Thread.getCurrentThread.getId (), pero ¿por qué querría hacerlo cuando los objetos LogRecord administrados por el registrador ya tienen el Id. De hilo? Creo que te falta una configuración en algún lugar que registre los ID de hilo para tus mensajes de registro.
fuente
Si su clase hereda de Thread , puede usar métodos
getName
ysetName
nombrar cada thread. De lo contrario, podría agregar unname
campoMyTask
e inicializarlo en su constructor.fuente
Si está utilizando el registro, los nombres de subprocesos serán útiles. Una fábrica de hilos ayuda con esto:
Salida:
fuente
Existe la forma de obtener el hilo actual:
Después de obtener el objeto de clase Thread (t), puede obtener la información que necesita utilizando los métodos de clase Thread.
Identificación del hilo gettting:
Nombre del hilo gettting:
fuente