2011-05-25 10 views
7

Estoy usando un ExecutorService para ejecutar algunos Callables, pero el nombre de los hilos es como fixed-pool-1-thread-1.¿Cómo cambiar el nombre de los hilos en un ExecutorService?

¿Cómo cambio el nombre de los hilos? Si no es posible, ¿hay otra forma de ejecutar Callables que pueda establecer el nombre de threadS?

+1

acabo preguntó el otro día - http://stackoverflow.com/questions/6113746/naming-threads-and-thread-pools-of-executorservice – mre

+0

@mre, Sí, se hizo muchas . –

+0

TL; Respuesta DR: http://stackoverflow.com/a/9748697/231917 – zengr

Respuesta

11

Vas a tener que utilizar una implementación ExecutorService que le permite establecer la ThreadFactory1 utilizado para crear hilos, por ejemplo, ThreadPoolExecutor. Pase una instancia que crea hilos con los nombres propios.

También hay una útil clase en commons-lang que permite especificar nombres de hilos con un patrón: BasicThreadFactory. Esto evita tener que crear una subclase ThreadFactory solo para proporcionar el comportamiento de nomenclatura.

+0

+1, para referencia de Javadoc y respuesta correcta/concisa – mre

+0

¿Hay alguna implementación nativa java de la interfaz ThreadFactory? –

+0

@Renato, la única implementación de biblioteca accesible es de la clase de utilidad 'Ejecutores' y no le permite proporcionar una cadena de nombre. –

5

Guava casi siempre tiene lo que need. ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("my-sad-thread-%d").build() y pásalo a tu ExecutorService.

3

Una manera rápida y sucia;

public void run() { 
    Thread.currentThread().setName(aName); 
    doStuff(); 
} 
+1

Esto supone que puede cambiar el método de ejecución del subproceso. –

Cuestiones relacionadas