Java thread

wiam_ Messages postés 188 Statut Membre -  
wiam_ Messages postés 188 Statut Membre -
Bonjour,

j'ai un petit pb avec les thread en java , voici la structure de mon programme

Laclasse extends thread {

- première méthode qui établie une connexion udp , et envoie des mise à jour à une autre classe , de temps en temps
- deuxième méthode qui permet d'incrémenter le compteur de la classe
- troisième méthode qui permet de décrémenter le compteur de la classe
}

-ce que je souhaite faire est de créer une méthode run qui ne s'arrete jamais, qui permet de lancer ces trois méthodes mais aléatoirement, c à dire pas dans un ordre précis , ni le même nbre de fois. je veux par exemple que la première méthode envoie des mise à jour en permanence à l'autre classe mais pas après chaque incrémentation du compteur , et la troisième peut être appelé parfois après la trsième, parfois avant ... et ainsi de suite

J'ai essayé avec une méthode comme ça, avec des sleep() aléatoire à l'intérieur de chaque méthode,

public void run(){
while(true){
methode1();
methode2();
methode3();
}
}

mais les 3 méthodes sont tjrs appelé le même nbre de fois et dans le même ordre.

si qql peut dire comment je peux faire , ce serait gentil

Merci

4 réponses

  1. wiam_ Messages postés 188 Statut Membre 8
     
    personne !!
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Non, entre 1h et 10h du matin les gens ont souvent pour habitude de dormir ;-)
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Essaye ceci :

    import java.util.random;
    
    class Laclasse extends Thread
    {
        ...
        private Random r;
    
        Laclasse(...)
        {
            ...
            r=new Random();
        }
    
        ...
    
        public void run()
        {
            switch (r.nextInt(3))
            {
                case 1 : methode1(); break;
                case 2 : methode2(); break;
                case 3 : methode3(); break;
             }
             run();
        }
    }
    0
  3. wiam_ Messages postés 188 Statut Membre 8
     
    merci pour ta réponse, le switch est une bonne idée ,
    ça m'arrange très bien pour les methodes 2 et 3, par contre pour la méthode 1 , je voudrais qu'elle envoie des mise à jour régulièrement , par exemple je veux qu'elle soit appelée toutes les 2 min . si t'as une autre proposition ce serait sympa :)

    Merci encore
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Essaye ceci :

      import java.util.random; 
      
      class Laclasse extends Thread 
      { 
          ... 
          private Random r; 
          private long nextUpdate;
      
          Laclasse(...) 
          { 
              setDaemon(true); // thread démon
              ... 
              r=new Random(); 
              nextUpdate=System.currentTimeMillis();
          } 
      
          ... 
      
          public void run() 
          {
              while(true) // thread démon, s'arrêtera avec le processus appelant
              {
                  if (System.currentTimeMillis() > nextUpdate)
                  {
                       methode1();
                       nextUpdate = System.nextTimeMillis()+120000; // 2 mn
                  }
      
                  switch (r.nextInt(2)) 
                  {
                      case 2 : methode2(); break; 
                      case 3 : methode3(); break; 
                   }
              }
          } 
      }

      La confiance n'exclut pas le contrôle
      0
  4. wiam_ Messages postés 188 Statut Membre 8
     
    merci bcp ,
    0