我遇到一个蛮奇怪的问题,下面的程序竟然停不下来
大神们,我是哪个地方出问题了?求指导!
public class ServerTest {
public static void main(String[] args) {
Connector connector = new Connector();
connector.run();
connector.shutdown();
}
private static class Connector implements Runnable{
private volatile boolean start = true;
public void run() {
while (start) {
try {
Thread.sleep(100);
System.out.println("Respond to requests.");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
public void shutdown () {
this.start = false;
}
}
}
线程 Thread
------解决方案--------------------
一般Runnable都是放在一个Thread 里跑的
Connector connector = new Connector();
Thread t = new Thread(connector);
t.start();
------解决方案--------------------
你这里
Connector connector = new Connector();
connector.run();
不是线程,所以函数执行到 connector.run();一直在while循环里,下面一句话一直没有执行
connector.shutdown();
你的意思应该是启动线程。
Connector connector = new Connector();
Thread t = new Thread(connector);
t.start();
------解决方案--------------------
public static void main(String[] args) {
Connector connector = new Connector();
connector.run();
connector.shutdown();
}
改为
Connector connector = new Connector();
Thread t = new Thread(connector);
t.start();
Thread.sleep(10);
connector.shutdown();
------解决方案--------------------
run是一个方法,跟线程就没有关系了,相当run方法里面一个死循环,所以一直会执行while
------解决方案--------------------
程序执行顺序楼主肯定是清楚的,由上向下顺序执行,遇到循环则反复,遇到分支则选择,而楼主的代码遇到循环,没有退出条件,则为死循环,无法跳出run函数,因此继续执行shutdown。