Thread

Rymita Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
Rymita Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
d'accord! Merciii :))
0