您好我正在使用下一个代码尝试停止某个线程,但是当我看到Running为false时它再次变为真。
public class usoos {
public static void main(String[] args) throws Exception {
start();
Thread.sleep(10000);
end();
}
public static SimpleThreads start(){
SimpleThreads id = new SimpleThreads();
id.start();
System.out.println("started.");
return id;
}
public static void end(){
System.out.println("finished.");
start().shutdown();
}
}
和线程
public class SimpleThreads extends Thread {
volatile boolean running = true;
public SimpleThreads () {
}
public void run() {
while (running){
System.out.println("Running = " + running);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
}
System.out.println("Shutting down thread" + "======Running = " + running);
}
public void shutdown(){
running = false;
System.out.println("End" );
}
}
问题在于,当我尝试停止它时(我将运行设置为false),它会再次启动..
答案 0 :(得分:5)
在end
方法中查看此行:
start().shutdown();
你没有停止原始实例;你正在开始另一个,然后你立即关闭。
您的start
和end
方法之间没有任何关联 - 没有信息,没有参考从一个传递到另一个。显然不可能停止在start
方法中启动的线程。
您的end
方法不应该是static
;事实上,你甚至不需要它,shutdown
已经是它了:
SimpleThreads t = start();
Thread.sleep(10000);
t.shutdown();
答案 1 :(得分:0)
因为在end
方法中你只需创建一个新的Thread
并将其删除,保存线程实例并将其删除:
您的代码应如下所示:
public class usoos {
public static void main(String[] args) throws Exception {
SimpleThreads id = start();
Thread.sleep(10000);
end(id);
}
public static SimpleThreads start(){
SimpleThreads id = new SimpleThreads();
id.start();
System.out.println("started.");
return id;
}
public static void end(SimpleThreads id){
System.out.println("finished.");
id.shutdown();
}