fermeture thread java

fermeture thread java - Java - Programmation

Marsh Posté le 15-09-2009 à 12:25:26    

salut  
j'ai un problème  pour arreter mes threads .  pouvez vous m'aider ? svp
 voici mon thread :  
 
           public class monThread extends Thread{
 
 public void run (){
 try{
   for(int i= 0; i<uneValeur; i++){
   monTraitement();
  Thread.sleep(3000);
 }
 }catch( InterruptedException  e) {
 System.out.println ("problem" +e}
 }
 }
 
voici la methode pour lancer le thread.
 
    public void  demarrerThread(){
   monThread  T1 = new  monThread();
   T1.start();
 }
 
voici  la methode pour arreter  le thread ( NE MARCHE  PAS ).
 
poublic void stoperThread(){
 monThread  T1 = new  monThread();
   try{
   if (T1.isAlive()){
                   deconnecteServeur();  //  methode pour se deconnecter du serveur
                                                  // au fait il s'agit d'une  com  CLIENT -SERVEUR
       T1.Interrupt();
       T1 = null;
       }
 }catch(Exception  e){
   
   }
 
 }
MERCI

Reply

Marsh Posté le 15-09-2009 à 12:25:26   

Reply

Marsh Posté le 15-09-2009 à 13:10:55    

(utilise les balises [code=java][ /code] http://forum-images.hardware.fr/icones/message/c.gif stp, ca sera plus lisible...)
 
 
 
revoie tes concepts de POO, la tu instancie un nouveau thread à arrêter, tu récupére pas celui qui tourne...
 
 
 
en plus (semi hs), ya pas un débat qui dit qu'il vaut mieux passer par l'interface Runnable pour faire des threads?
 
 

Reply

Marsh Posté le 15-09-2009 à 23:30:13    

Tu dois garder la référence à T1 que tu assignes dans demarrerThread().
 
Ensuite tu appelles T1.interrupt() sur ce même T1 afin de sortir le thread de l'appel à sleep() en levant une InterruptedException.

Reply

Marsh Posté le 17-09-2009 à 15:45:29    

J'ai suivi les conseilset j'ai essayé com çà ,  mais il n'arrete toujours pas les threads.  
 
 
 public class myThread implements Runnable{
 
 private  Thread  T1;  
 
public void Start ( ) {
 myThread = new Thread( this );
  myThread.start();
 }  
public void run(){
 try{
 for (int i=0; i<someThing; i++){
 traitement();
 Thread.sleep(1000);
}//end for
catch(InterruptedException e){}
}//end try
}//end run
 
 
boolean finish = true;
 synchronise public void stopThread(){
  finish = true;
  while(finish){
    if (T1.isAlive()){
       T1.interrupt();
       T1 = null;      
}
}
 
}
}  

Reply

Marsh Posté le 17-09-2009 à 16:19:35    

t'initialise pas T1 la... revois tes bases:
http://alwin.developpez.com/tutorial/JavaThread/

 


EDIT: et utilise les balise code quand tu postes stp... ca sera plus lisible.


Message édité par pataluc le 17-09-2009 à 16:22:35
Reply

Marsh Posté le 17-09-2009 à 17:44:31    

C'est à peine lisible... Je ne comprend rien à ce que tu essayes de faire dans ton code mais je peux te dire que quand tu appelles stopThread() tu vas lever une belle NullPointerException. Dans la boucle de ton run() tu dois également ajouter la condition:
 
&& !Thread.interrupted()
 
pour tester si un appel à l'interruption a été fait par le thread principal et ainsi sortir de la boucle si c'est le cas pour que ton Thread puisse se terminer proprement.
 
Après avoir appelé t1.interrupt(), ton thread continue à fonctionner pendant quelques instants, c'est normal, pas la peine d'appeler t1.interrupt() en boucle. Pour que ton thread principal attende que le thread t1 s'arrête, tu dois appeler t1.join().
 
Si tu n'as pas encore compris je te conseille de te documenter un peu sur les threads via un bon bouquin.


Message édité par cbeyls le 17-09-2009 à 17:47:50
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed