Java thread

Fermé
Messages postés
169
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
11 août 2013
-
Messages postés
169
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
11 août 2013
-
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

Messages postés
169
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
11 août 2013
8
personne !!
Messages postés
16472
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 janvier 2022
2 939
Non, entre 1h et 10h du matin les gens ont souvent pour habitude de dormir ;-)
Messages postés
16472
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 janvier 2022
2 939
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();
    }
}
Messages postés
169
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
11 août 2013
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
Messages postés
16472
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 janvier 2022
2 939
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
Messages postés
169
Date d'inscription
samedi 1 mars 2008
Statut
Membre
Dernière intervention
11 août 2013
8
merci bcp ,