IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Stopper un thread pour ensuite le redémarrer


Sujet :

Java

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut Stopper un thread pour ensuite le redémarrer
    Bonjour
    je viens de créer 3 thread chacun execute un traitement je veux stopper un thread pour ensuite le démarrer.voici mon essai qui n'a pas donner grande chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class TestThread {
     
    	@SuppressWarnings("deprecation")
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		FirstThread t1= new FirstThread("test");
    		FirstThread t2 = new FirstThread("xxxxx");
    		FirstThread t3= new FirstThread("yyyyyy");
     
     
    		t1.start();t2.start();
    		t3.start();
     
    	t3.stop();
    	//t3.suspend();
           //t3.interrupt();
    	}
     
    }
    et j'ai comme résultat les 3 thread qui tourne sans cesse jusqu'à ce que le traitement prend fin.voici 3 thread qui affichent un compteur .meme si j'essai d'en stopper un d'entre eux, je ne parviens pas à le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Thread nommé : test - itération : 22
    Thread nommé : yyyyyy - itération : 22
    Thread nommé : xxxxx - itération : 22
    Thread nommé : test - itération : 23
    Thread nommé : yyyyyy - itération : 23
    Thread nommé : xxxxx - itération : 23
    Thread nommé : test - itération : 24
    Thread nommé : xxxxx - itération : 24
    Thread nommé : yyyyyy - itération : 24
    Thread nommé : test - itération : 25
    Thread nommé : yyyyyy - itération : 25
    Thread nommé : xxxxx - itération : 25
    comment stopper le thread t3 par exemple

    merci

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Un thread arrivé à la fin de son exécution est mort et ne peut plus être démarré (il faut le réinstancier et le re-starter).

    Par contre, on peut le mettre en "pause" en utilisant des wait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    	public static void main(String[] args) {
    		final Object lock1 = new Object();
    		Thread t1 = new Thread() {
    			{
    				setDaemon(true);
    			}
     
    			public void run() {
    				while (true) {
    					synchronized (lock1) {
    						try {
    							lock1.wait();
    						} catch (InterruptedException e) {
    							e.printStackTrace();
    						}
    					}
     
    					System.out.println("t1 has woken up");
    				}
    			}
    		};
     
    		t1.start();
     
    		Thread t2 = new Thread() {
    			{
    				setDaemon(true);
    			}
     
    			public void run() {
    				while (true) {
    					System.out.println("t2 will notify");
    					synchronized (lock1) {
    						lock1.notifyAll();
    					}
     
    					try {
    						Thread.sleep((int) (Math.random() * 1000) + 10);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
     
    				}
    			}
    		};
    		t2.start();
     
    		try {
    			Thread.sleep(25000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 30
    Points : 56
    Points
    56
    Par défaut
    Je conseille au passage, de jeter un oeil à l'API Concurrency de Java (http://docs.oracle.com/javase/6/docs...ge_description).

    Elle apporte de nombreux mécanismes de synchronisation simples et plus performants que le wait/notify

  4. #4
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Points : 3 766
    Points
    3 766
    Billets dans le blog
    12
    Par défaut
    Plus performant je ne sais pas, mais plus lisible et maintenable c'est sur.

    Le modèle producteur/consommateur avec un BlockingQueue ne conviendrait-t-il pas ?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Certainement plus performant en termes de temps de développement. Ca évite de réinventer la roue et très mal, les programmeurs on beaucoup de mal avec le multi thread en général

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/06/2015, 19h01
  2. Probleme pour stopper un thread
    Par BriocheNC dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/06/2009, 11h33
  3. [MFC] Creation d'un thread pour un popup d'attente
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 07/02/2006, 09h15
  4. Réponses: 3
    Dernier message: 11/02/2004, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo