当前位置: 代码迷 >> J2EE >> 线程封锁-变量赋值
  详细解决方案

线程封锁-变量赋值

热度:7   发布时间:2016-04-21 21:33:07.0
线程关闭-变量赋值
我遇到一个蛮奇怪的问题,下面的程序竟然停不下来
大神们,我是哪个地方出问题了?求指导!


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();

------解决方案--------------------
引用:
这里我还有一个问题啊,如果我改成Thread t = new Thread(connector); t.start(); 
能正常结束。
但是如果我把t.start() 改成t.run()的话,他还是停不下来

run是一个方法,跟线程就没有关系了,相当run方法里面一个死循环,所以一直会执行while
------解决方案--------------------
程序执行顺序楼主肯定是清楚的,由上向下顺序执行,遇到循环则反复,遇到分支则选择,而楼主的代码遇到循环,没有退出条件,则为死循环,无法跳出run函数,因此继续执行shutdown。
  相关解决方案