256 votes

Nommage des threads et des pools de threads de ExecutorService

Disons que j'ai une application qui utilise l' Executor - cadre en tant que tel

Executors.newSingleThreadExecutor().submit(new Runnable(){
    @Override
    public void run(){
        // do stuff
    }
}

Quand je lance cette application dans le débogueur, un thread est créé avec la suivante (par défaut) nom: Thread[pool-1-thread-1]. Comme vous pouvez le voir, ce n'est pas très utile et aussi loin que je peux dire, l' Executor - cadre ne fournit pas un moyen facile de nommer les threads créés ou thread-piscines.

Alors, comment fait-on pour fournir des noms pour les threads/thread-piscines? Par exemple, Thread[FooPool-FooThread].

306voto

wrick Points 1825

Goyave a presque toujours ce que vous recherchez.

et passer au loin à votre `` .

133voto

NPE Points 169956

Vous pourriez fournir un ThreadFactory de newSingleThreadScheduledExecutor(ThreadFactory threadFactory). L'usine sera responsibe pour créer des threads, et sera en mesure de les nommer.

Pour citer la Javadoc:

Créer de nouvelles discussions

De nouvelles discussions sont créé à l'aide d'un ThreadFactory. Si ce n' d'indication contraire, un Les exécuteurs.defaultThreadFactory() est utilisé, qui crée des threads à tous dans le même ThreadGroup et avec la même NORM_PRIORITY priorité et non-démon de l'état. Par la fourniture d'une différents ThreadFactory, vous pouvez modifier le thread du nom, du groupe de thread, la priorité, démon de l'état, etc. Si un ThreadFactory ne parvient pas à créer un thread interrogé par retourner null à partir de newThread, à l'exécuteur testamentaire de continuer, mais peut-être pas en mesure d'exécuter du tout les tâches.

101voto

Nikita Beloglazov Points 10623

Vous pouvez essayer de fournir votre propre fabrique de fil, ce qui créera le fil avec les noms appropriés. Voici un exemple :

69voto

FlorianT Points 81

Vous pouvez également modifier le nom de votre fils par la suite, alors que le thread est exécuté :

Cela pourrait être intéressant si par exemple vous utilisez le même ThreadFactory pour différents types de tâches.

53voto

scompt.com Points 11304

Le `` d’apache commons-lang est également utile de prévoir le comportement d’affectation de noms. Au lieu d’écrire une classe interne anonyme, vous pouvez utiliser le générateur pour nommer les threads que vous souhaitez. Voici l’exemple extrait les javadocs :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X