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
Version imprimable
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:
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:
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