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

Concurrence et multi-thread Java Discussion :

Problème pause de thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Par défaut [Résolu]Problème pause de thread
    Bonjour,
    Je vous explique ma petite histoire. J'ai un thread A.
    Le thread A va crée des thread,on va prendre en particulier un thread B. Ce thread B va faire une pause : ThreadB.sleep(5000).
    Le problème avec cette méthode, c'est que le thread B fait bien sa pause mais elle met aussi le thread A en attente.
    Merci de m'éclairer.

  2. #2
    Membre éprouvé Avatar de kaizokuni
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 83
    Par défaut
    Bonsoir,

    pourrais tu donner ton code s'il te plait?

    merci

  3. #3
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Par défaut
    ba y'a rien de compliquer mais bon si ça peut vous aider :



    La classe GestionSalon qui creer les thread.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    public class GestionSalon implements Runnable
    {
            private int tempsTraitement;
            private int tempsClient;
            private int nombreClient;
            private IhmSalon monIhm;
            private Semaphore siege;
            private ArrayList<Client> listeClient;
            
            GestionSalon(IhmSalon monIhm)
            {
                siege=new Semaphore(3);
                this.monIhm=monIhm; 
                tempsTraitement=monIhm.getTempsTraitement();
                tempsClient=monIhm.getTempsClient();
                listeClient=new ArrayList<Client>();
                nombreClient=0;
            }
            public void coiffer(int numeroClientcourant)
            {
            try {
                siege.acquire();            
                listeClient.get(numeroClientcourant).setSiegePris(monIhm.prendreSiege());
                listeClient.get(numeroClientcourant).pause(10000);
                monIhm.libererSiege( listeClient.get(numeroClientcourant).getSiegePris());
                siege.release();
            } catch (InterruptedException ex) {
                Logger.getLogger(GestionSalon.class.getName()).log(Level.SEVERE, null, ex);
            }
            }
            private void pause(int temps)
            {
                try {
                    Thread.currentThread().sleep(temps);
                } catch (InterruptedException ex) {
                    Logger.getLogger(GestionSalon.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
    // c'est ici que les thread sont cree
        public void run() {
            Client tamponClient;
            while(true)
            {
                tamponClient=new Client(this);
                tamponClient.setNumeroClient(nombreClient);            
                listeClient.add(nombreClient,tamponClient);
                nombreClient++;
                tamponClient.run();  
                tamponClient=null;
                pause(3*1000);          
            }
        }
    
            
    
    }
    Les thread crees sont de types Client:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public class Client implements Runnable
    {
        private GestionSalon monGestionSalon;
        private int siegePris;
        private int numeroClient;
     
        Client(GestionSalon monGestionSalon)
        {
            this.monGestionSalon=monGestionSalon;
        }
        public void run() {
                monGestionSalon.coiffer(numeroClient);
                Thread.interrupted();
     
        }
        public void pause(int temps)
        {
            try {
                Thread.currentThread().sleep(temps);
            } catch (InterruptedException ex) {
                Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
        public int getSiegePris() {
            return siegePris;
        }
     
        public void setSiegePris(int siegePris) {
            this.siegePris = siegePris;
        }
     
        public int getNumeroClient() {
            return numeroClient;
        }
     
        public void setNumeroClient(int numeroClient) {
            this.numeroClient = numeroClient;
        }



    }

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Par défaut
    Bonjour,
    un thread en Java doit étendre java.lang.Thread (et non pas implémenter l'interface Runnable) et on le lance en appelant la méthode start() (et pas run()).

    Voir par exemple : http://viennet.developpez.com/cours/java/thread/#LII-C

  5. #5
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Par défaut
    J'ai résolu mon problème au lieu d'implémenter l'interface runnable pour la classe client je l'ai fais hérité de classe Thread.
    Mais j'ai lu le tuto que tu m'as passé et il est dit :
    L'autre moyen de créer un thread est de déclarer une classe qui implémente l'interface Runnable. Cette interface déclare seulement une méthode : run().
    Donc c'est quoi la différence alors.

  6. #6
    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,

    Citation Envoyé par gulain Voir le message
    un thread en Java doit étendre java.lang.Thread (et non pas implémenter l'interface Runnable)
    Il est tout à fait possible d'implémenter Runnable et de passer l'instance en paramètre du thread qu'on crée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Thread(monRunnable);
    Citation Envoyé par Samshay Voir le message
    Donc c'est quoi la différence alors.
    Runnable définit seulement une interface avec une seule méthode : run(). C'est cette méthode qui sera exécuté par le thread.

    Mais si tu l'appelles directement tu ne crées pas de thread : tu appelles simplement une méthode quelconque !

    Pour créer un thread il faut appeler la méthode start() de ton objet Thread, et c'est elle qui appellera la méthode run() dans un nouveau thread...

    a++

  7. #7
    Membre actif
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Par défaut
    Merci en faite je suis juste un boulet, j'avais complètement zappé. Merci quand meme.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2006, 15h39
  2. problème sur les threads et les sémaphores
    Par ramislebob dans le forum Windows
    Réponses: 1
    Dernier message: 29/06/2006, 11h52
  3. [C#] Problème sur un Thread
    Par bisounux dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/04/2006, 20h43
  4. Problème dans un thread
    Par BNS dans le forum MFC
    Réponses: 3
    Dernier message: 23/03/2006, 14h21
  5. Réponses: 5
    Dernier message: 10/05/2005, 10h22

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