2011-12-14 1 views
1
public class ThreadStateVerifier { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     VerifyThread t = new VerifyThread() ; 
     Thread th = new Thread(t) ; 
     th.start() ; 
     for(int i = 0 ; i < 5 ; i++){ 
      if(i == 4) 
      { 
       t.setactive(false) ; 
      } 
     } 
    } 

} 

class VerifyThread implements Runnable{ 

    private String message = "It is working" ; 
    private volatile boolean active = true ; 
    private static int i = 0 ; 
    public void run(){ 
      try{ 

       for(; active ; i++){ 
        System.out.println("i is" + i); 
        Thread.sleep(1000) ; 
       } 
     } 
     catch(InterruptedException ie){} 
    } 
    public static void setactive(boolean active){ 
     active = active ; 
    } 
} 

Je veux définir la valeur de active-false, lorsque le fil est en fait en cours d'exécution.Définition des attributs d'un fil conducteur

Quand je lance ce programme, VerifyThread va dans une boucle infinie, à savoir active n'est pas réglé à false, bien que sa valeur est définie sur false par main explicitement.

Si mon approche est incorrecte, veuillez suggérer la bonne approche pour le faire. L'objectif est que la valeur active doit être définie sur false, de sorte que le VerifyThread s'arrête ultérieurement.

Je ne veux utiliser aucune file d'attente intermédiaire qui stocke la valeur de l'actif car il s'agira d'un surcoût en mémoire.

Répondre

2

Lorsque vous appelez cette méthode:

public static void setactive(boolean active){ 
    active = active ; 
} 

vous faites une affectation redondante de la variable de paramètre à lui-même. Pour référencer le membre de la classe dont vous avez besoin:

public void setactive(boolean active){ 
    this.active = active ; 
} 

Modifier: Recherche sur le code, je peux voir que ce que vous essayez de faire ne fonctionnera pas de toute façon. Vous démarrez un thread en parallèle puis vous lui dites immédiatement d'arrêter (l'exécution de 5 itérations de boucle est négligeable). Vous ne verrez probablement aucune sortie sur la console.

Si vous pouviez nous dire exactement ce que vous vouliez faire, nous pourrions peut-être vous aider à le repenser.

+0

et supprimer statique –

+0

@Tim Büthe: à droite, j'ai raté cela. – Tudor

+0

mon premier poste à stackoverflow, et je suis vraiment étonné de voir l'aide rapide de vous les gars. Apprécier. –

Questions connexes