Thread

Fermé
Rymita Messages postés 8 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 3 juillet 2014 - 4 avril 2014 à 21:39
Rymita Messages postés 8 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 3 juillet 2014 - 4 avril 2014 à 23:30
Bonjour,
je veux savoir comment est ce que je peux définir 2 ou plusieurs Thread dans une même classe. J'ai ma classe implements Runnable et dans la methode run() j'ai écrit un certain code de connexion à la base maintenant je veux définir un autre Thread dans la meme classe comment je fais??
Merci de m'aider

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 avril 2014 à 21:55
Bonsoir,

Tu peux définir autant de Thread que tu veux (quelques milliers maximum), si tu as un problème avec ton code il faudrait voir comment tu t'y es pris pour savoir pourquoi tu n'arrives pas à en mettre plusieurs.
0
Rymita Messages postés 8 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 3 juillet 2014
4 avril 2014 à 22:25
Bonsoir, merci pour votre réponse
je voudrais savoir aussi lorsque je lance un thread, il s'exécute jusqu'à quand ? comment est ce que je peux l'arréter pour lancer un autre thread?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 avril 2014 à 22:58
Un Thread s'arrête lorsque la méthode run() est terminée.
Tu peux attendre qu'un thread se termine en utilisant la méthode join().

Pour forcer l'arrêt d'un Thread, c'est un peu compliqué car il faut faire ça proprement.
Ça passe par l'utilisation de la méthode interrupt() sur le thread, ce qui va passer la méthode isInterrupted à true, il faut donc gérer cette possibilité à l'intérieur de la méthode run, l'exception associée est InterruptedException, tu dois faire un try/catch dessus et si tu l'interceptes arrêter la méthode run.

Exemple avec ces différents points :

public class ThreadCompteur extends Thread
{
    private final int id;
    private final int n;
    private final long millis;
    
    public ThreadCompteur(int id, int n, long millis)
    {
        this.id = id;
        this.n = n;
        this.millis = millis;
    }
    
    @Override
    public void run()
    {
        for (int i=0; i<n; i++)
        {
            System.out.println("Thread "+id+" step "+i);
            
            if (isInterrupted())
            {
                System.err.println("Thread "+id+" isInterrupted");
                return;
            }
            
            try
            {
                sleep(millis);
            }
            catch (InterruptedException e)
            {
                System.err.println("Thread "+id+" isInterrupted");
                return;
            }
        }
    }
}

public class Test
{
    public static boolean[] eratosthene(int n)
    {
        boolean[] prime = new boolean[n];
        boolean[] compute = new boolean[n];
        
        for (int i = 2; i < n; i++ )
        {
            if (compute[i])
                continue;
            
            prime[i] = true;
            
            for (int j = i; j < n; j += i)
                compute[j] = true;
        }
        
        return prime;
    }
    
    public static void main(String[] args) throws InterruptedException
    {
        Thread[] threads = new Thread[10];
        
        System.out.println("Ready ?");
        
        for (int i=0; i<threads.length; i++)
        {
            int n = 10+i;
            threads[i] = new ThreadCompteur(i, n, 10000/n);
        }
        
        System.out.println("Go !");
        
        for (int i=0; i<threads.length; i++)
            threads[i].start();
        
        System.out.println("Wait...");
        
        for (int i=0; i<threads.length; i++)
            threads[i].join();
        
        System.out.println("Finish !!!");
    }
}

Remarque : ici je ne me sers pas vraiment de l'interruption, mais il est important d'y penser au cas où tu veuilles arrêter les threads avant leur fin.
0
Rymita Messages postés 8 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 3 juillet 2014
4 avril 2014 à 23:30
d'accord! Merciii :))
0