Я искал остановку потока Java изящно и нашел это, но я не могу знать, как проверить пример этой ситуации - PullRequest
0 голосов
/ 10 октября 2011

Это хороший пример остановки потока. Как изящно остановить поток Java? - Спасибо за геев :) но когда я пытаюсь проверить этот пример, я получил бесконечный цикл. Вы можете мне помочь? Это мой код

public class Num{

public void crash(ManualStopping t1) {
    t1.stopMe();
}

public static void main(String [] args) {

    Num num = new Num();
    ManualStopping t1 = new ManualStopping();
    t1.run();
    System.out.println("Main thread");
    num.crash(t1);
}

}

class ManualStopping extends Thread{

volatile boolean finished = false;
public void stopMe(){
    finished = true;
}
public void run() {
    while(!finished){
        System.out.println("I'm alive");
    }
}

}

Ответы [ 3 ]

5 голосов
/ 10 октября 2011

Я думаю, вам нужно start ваша тема - не run это.Вызывая run, вы просто делаете обычный вызов метода, а не запускаете отдельный поток.

1 голос
/ 10 октября 2011

t1.run(); Измените его на t1.start().

В результате получается, что поток, который вы намереваетесь создать, на самом деле не работает как отдельный поток.Вместо этого цикл

while(!finished){ System.out.println("I'm alive"); }

выполняется в основном потоке, и ваш код num.crash(t1); фактически никогда не вызывается.Это вызывает бесконечный цикл.

1 голос
/ 10 октября 2011

Ничто в вашем коде не вызывает метод stopMe для ManualStopping.isInterrupted() - это тест, который не меняет состояние потока.И, как указывает @DaveHowes, вы даже не запускаете отдельный поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...