public class Example{
    public static void main(String args[]){
        A target=new A();    //线程thread的目标对象 
        Thread thread=new Thread(target);
        thread.setName("张三");
        thread.start();
        while(target.getStop()==false){}
        System.out.println("我是主线程,负责恢复"+thread.getName()+"线程"); 
        target.restart();  //恢复thread线程
    }

class A implements Runnable{
    int number=0;
    boolean stop=false;
    boolean getStop(){
            return stop;
    }
    public void run(){
        while(true){
            number++;
            System.out.println(Thread.currentThread().getName()+"的number="+number);
            if(number==3){
                try{  System.out.println(Thread.currentThread().getName()+"被挂起");
                     stop=true;
                     hangUP();//挂起线程
                     System.out.println(Thread.currentThread().getName()+"恢复执行");
                } 
                catch(Exception e){}  
            }
            try{ Thread.sleep(1000); 
            } 
           catch(Exception e){}
        }
    }
    public synchronized void  hangUP() throws InterruptedException{
        wait();  
    }
    public synchronized void  restart(){
        notifyAll();
    }
}求教,main方法中的空循环是做什么用的?初学线程,不是很理解。

解决方案 »

  1.   

    线程没有被挂起就一直循环!直到线程被挂起 stop!=flase
      

  2.   

    问题补充:如果在那个空循环里加上一句:System.out.println("");
    子线程就不运行又是怎么回事?难道是抢不到CPU控制权?
    如果这种情况抢不到,那么空循环为什么又能抢到呢?
      

  3.   

    while(target.getStop()==false){}
    等待target线程结束,target线程运行在主线程main里面,如果没有这个空循环,主线程顺序执行,target还没有执行完得时候主线程已经执行完退出了,会导致target也退出。