Java thread

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. personne !!
    1. Modérateur
      Non, entre 1h et 10h du matin les gens ont souvent pour habitude de dormir ;-)
  2. Modérateur
    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();
        }
    }
    1. 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
      1. Modérateur
        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