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 :

[Stratégie] Thread et synchronisation


Sujet :

Java

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut [Stratégie] Thread et synchronisation
    Bonjour,

    Je souhaite pouvoir lancer N threads et attendre qu'un des threads termine son boulot pour en lancer un nouveau, puis attendre à nouveau qu'un thread se termine etc... Je fais d'habitude du .Net et j'aurai alors utilisé des event (ManualResetEvent) pour que chaque thread puisse signaler à son "père" qu'il a terminé, celui-ci étant en attente sur un tableau d'event. Quel mécanisme utiliser en Java svp ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pourrais-tu être un peu plus précis ce n'est pas très clair... mais la solution devrait se trouver du coté des Executors...

    a++

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Ok je vais regarder ton lien, merci. Une explication plus détaillée de mon probleme si ce n'est pas clair:

    J'ai une liste de traitements à faire, je souhaite exécuter ces traitements 5 par 5 pas plus. Donc l'idée est que dans mon thread principal je puisse lancer 5 threads en leur affectant chacun un traitement et dés qu'un thread se termine en créer un autre pour lui affecter le traitement suivant (une espece de thread pool en fait, peut être qu'il existe qque chose de tout prêt ?). Question: comment attendre en Java qu'un des 5 threads soit terminé ?

  4. #4
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Citation Envoyé par Sphax Voir le message
    Ok je vais regarder ton lien, merci. Une explication plus détaillée de mon probleme si ce n'est pas clair:

    J'ai une liste de traitements à faire, je souhaite exécuter ces traitements 5 par 5 pas plus. Donc l'idée est que dans mon thread principal je puisse lancer 5 threads en leur affectant chacun un traitement et dés qu'un thread se termine en créer un autre pour lui affecter le traitement suivant (une espece de thread pool en fait, peut être qu'il existe qque chose de tout prêt ?). Question: comment attendre en Java qu'un des 5 threads soit terminé ?
    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
       /** Création du pool de threads
            */
           ExecutorService threadPool = Executors.newFixedThreadPool(5);
     
           /** Création d'une tâche à executer
            */
           Runnable doRun = new Runnable() {
               public void run() {
                   System.out.println("MA TACHE S'EXECUTE PAR UN THREAD DU POOL");
               }
           };
     
           /** Mise en queue de ma tache dans le pool du thread
            *  ==> Ce dernier l'executera quand il le pourra
            */
           Future future = threadPool.submit( doRun );
     
           /** Possibilité de verifier le status de la tâche et meme de l'annuler 
            *  à l'aide de l'objet future
            */
           try {
               future.get(); // Exemple ici: Attente de la fin d'execution de la tache
           }
           catch(Exception e) { e.printStackTrace(); }
     
           /** Libération du pool (quand il ne sera plus utilisé)
            */
           try {
               threadPool.shutdown();
           }
           catch(Exception e) { e.printStackTrace(); }

  5. #5
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Bonjour,
    il vaut mieux d'abord connaitre les principes sur la synchro en Java:
    http://java.sun.com/docs/books/tutor...ncy/index.html

    Après tu choisira toi-même la solution adaptée

    Ici les Executors permettent effectivement de gérer un ThreadPool, dans une solution un peu différente de celle que tu proposais.
    Mais rien ne t'empêche d'implémenter ta propre solution à coup de wait/notifyAll:
    http://java.sun.com/docs/books/jls/s...emory.doc.html
    http://www.jchq.net/tutorial/07_03Tut.htm

Discussions similaires

  1. Threads et synchronisation
    Par divxdede dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 25/09/2007, 14h26
  2. Thread et synchronisation
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 15/03/2007, 11h17
  3. créer Thread et synchronisation C et VB
    Par storm_2000 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 20/01/2007, 12h49
  4. [THREAD] Problème synchronisation
    Par goddet dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/10/2006, 09h16
  5. [JNI] Class Thread et Synchronisation
    Par SteelBox dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/02/2006, 23h40

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