Bonjour,
suite à quelques soucis avec ma propre classe de gestion des threads, j'ai décidé d'utiliser un ThreadPoolExecutor avec une SynchronousQueue.
Voilà exactement ce que je veux faire :
- je veux disposer de N threads, ni plus ni moins.
- je ne veux surtout pas que ces threads soient détruits après utilisation car ils vont être réutilisés de nombreuses fois.
- je veux pouvoir passer des paramètres pour les calculs.
Voici ma classe qui étend la classe Thread qui effectue les calculs :
Code java : 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 private class MaClasseThread extends Thread { private int number = -1 ; public MaClasseThread(int number) { super() ; this.number = number ; // Numéro unique (bien évidemment). } public void Parameters(Object... parameters) { // ... on récupère les paramètres } public void run() { // ... on fait la travail ici en fonction des paramètres } }
Je construits ma synchronous queue et mon ThreadPoolExecutor :
J'ai mis un '?' car je ne sais pas quoi mettre car je veux les garder vivant indéfiniment.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 BlockingQueue<Runnable> queue = new SynchronousQueue<Runnable>() ; for (int i=0 ; i < N ; i++) queue.add(new MaClasseThread(i)) ; ThreadPoolExecutor tpe = new ThreadPoolExecutor(N, N, ?, TimeUnit.MILLISECONDS, queue) ;
Questions :
- comment récupérer le premier thread libre ?
- comment lui passer le travail que je souhaite ?
- comment le lancer après passage des paramètre de calcul ?
Merci par avance
Partager