Utilisation ThreadPoolExecutor et
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:
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 :
Code:
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) ; |
J'ai mis un '?' car je ne sais pas quoi mettre car je veux les garder vivant indéfiniment.
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