IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Utilisation ThreadPoolExecutor et


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut 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 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 :
    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) ;
    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
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    pas la peine de se pose la question du premier Thread libre.
    pour les tâches voir la doc de ExecutorService

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je sais pas trop pourquoi tu t'amuses à créer tes threads, et qu'est-ce que tu essaies de faire en les mettant dans la queue.
    Les threads, c'est le boulot du ThreadPoolExecutor. Oublie-les.

    Citation Envoyé par ToTo13 Voir le message
    BJ'ai mis un '?' car je ne sais pas quoi mettre car je veux les garder vivant indéfiniment.
    Ce que tu veux. Ce sera ignoré, puisque le max et le core sont égaux, donc il n'y aura jamais plus de threads que le core, et donc jamais aucun candidat à l'arrêt.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    pas la peine de se pose la question du premier Thread libre.
    pour les tâches voir la doc de ExecutorService
    Ben... comment est ce que je le récupère ?




    Citation Envoyé par thelvin Voir le message
    Je sais pas trop pourquoi tu t'amuses à créer tes threads, et qu'est-ce que tu essaies de faire en les mettant dans la queue.
    Les threads, c'est le boulot du ThreadPoolExecutor. Oublie-les.
    Ok.
    Donc je les passe directement au ThreadPoolExecutor. Mais avec quelle méthode ? submit, newTaskFor ?


    Citation Envoyé par thelvin Voir le message
    Ce que tu veux. Ce sera ignoré, puisque le max et le core sont égaux, donc il n'y aura jamais plus de threads que le core, et donc jamais aucun candidat à l'arrêt.
    Ok merci.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Donc je les passe directement au ThreadPoolExecutor. Mais avec quelle méthode ? submit, newTaskFor ?
    Tu sais, newTaskFor() est protected. Ce n'est pas franchement ce qu'on attendrait d'un moyen de soumettre une tâche à l'ExecutorService.
    D'ailleurs, la JavaDoc indique à quoi ça sert : en gros encapsuler un Runnable ou un Callable dans un objet tâche gérable par l'ExecutorService.

    submit(), donc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Tu sais, newTaskFor() est protected. Ce n'est pas franchement ce qu'on attendrait d'un moyen de soumettre une tâche à l'ExecutorService.
    D'ailleurs, la JavaDoc indique à quoi ça sert : en gros encapsuler un Runnable ou un Callable dans un objet tâche gérable par l'ExecutorService.

    submit(), donc.
    Effectivement, je n'avais pas vu le protected. Merci.

    Je soumets donc mes classes runnable grâce à cette méthode.
    Je vois donc comment lancer des tâches via le ThreadPoolExecutor comme cela est fait ici.
    Mais à chaque itération, on crée un nouveau thread que l'on donne au ThreadPoolExecutor. Or ce que je voudrai c'est éviter de ré-allouer à chaque itération, donc j'ai besoin de pouvoir passer les paramètres à mon thread avant de le donner au ThreadPoolExecutor.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    à chaque boucle tu crée un Callable qui est pris en charge par un Thread qui se libère dans le pool. tu ne crée pas un nouveau Thread (le nombre de Thread dépend de la stratégie de l'executor que tu as choisi)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo