Bonjour,
J'ai une classe qui implemante "Runnable", cette classe est lancé depuis un ExecutorService de 10 Threads.
Je souhaite connaitre le Numero du thread courant afin de faire des calculs.
Cela est il possible ?
Merci
Bonjour,
J'ai une classe qui implemante "Runnable", cette classe est lancé depuis un ExecutorService de 10 Threads.
Je souhaite connaitre le Numero du thread courant afin de faire des calculs.
Cela est il possible ?
Merci
Non, par contre il y a Thread.getName() et Thread.getId() qui peuvent servir à distinguer les threads entre eux. Il y a aussi l'instance même de Thread. On pourrais d'ailleur imaginer ce genre de méthode pour obtenir l'info
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private Map<Thread,Integer> numbers = new WeakHash<Thread,Integer>; int number = 0; public Synchronized int getThreadNumber(){ Thread t = Thread.currentThread(); if (!numbers.contains(t)) numbers.put(t,number++); return numbers.get(t); }
Bonjour,
j'aurais plutôt tendance à conserver un int dans le Runnable, (suppose une instance de Runnable par Thread).
Sinon avec les executors, on peux utiliser un ThreadFactory pour maintenir le N° dans le nom, ce que j'avais fait pour mon projet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 private static class TF implements ThreadFactory { private String threadGroupName ; private String threadName; private ThreadGroup tg ; private int threadNb ; public TF(String pThreadGroupName,String pThreadName) { this.threadName=pThreadName; this.threadGroupName=pThreadGroupName; tg = new ThreadGroup( threadGroupName ); tg.setDaemon(true ); threadNb = 0; } @Override public Thread newThread( Runnable pR ) { return new Thread( tg, pR, threadName + "_" + threadNb++ ); } public Thread newThread( Runnable pR , String pName) { return new Thread( tg, pR, pName + "_" + threadNb++ ); } } public void init( ) { threadFactory=new TF("threadGroup","threadName"); execSrv = Executors.newFixedThreadPool(10, threadFactory ); }
Bonsoir
Merci de vos reponses, Je vais instantier une variable number si different de 0 qui se base sur un compteur unique externe.
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager