看看:Thread.wait()
Thread.join()
是否可用,建议下载一个JDK帮助文档,有很详细各个类及里方法的说明。

解决方案 »

  1.   

    Thread.wait()
    Thread.join()
      

  2.   

    线程还能调用另一个线程的join( ),等那个线程结束之后再继续运行。如果线程调用了调用了另一个线程t的t.join( ),那么在线程t结束之前(判断标准是,t.isAlive( )等于false),主叫线程会被挂起。调用join( )的时候可以给一个timeout参数,(可以是以毫秒,也可以是以纳秒作单位),这样如果目标线程在时限到期之后还没有结束,join( )就会强制返回了。join( )调用可以被主叫线程的interrupt( )打断,所以join( )也要用try-catch括起来。class Sleeper extends Thread {
      private int duration;
      public Sleeper(String name, int sleepTime) {
        super(name);
        duration = sleepTime;
        start();
      }
      public void run() {
        try {
          sleep(duration);
        } catch (InterruptedException e) {
          System.out.println(getName() + " was interrupted. " +
            "isInterrupted(): " + isInterrupted());
          return;
        }
        System.out.println(getName() + " has awakened");
      }
    }
    class Joiner extends Thread {
      private Sleeper sleeper;
      public Joiner(String name, Sleeper sleeper) {
        super(name);
        this.sleeper = sleeper;
        start();
      }
      public void run() {
       try {
          sleeper.join();
        } catch (InterruptedException e) {
          throw new RuntimeException(e);
        }
        System.out.println(getName() + " join completed");
      }
    }
    public class Joining {
      private static Test monitor = new Test();
      public static void main(String[] args) {
        Sleeper
          sleepy = new Sleeper("Sleepy", 1500),
          grumpy = new Sleeper("Grumpy", 1500);
        Joiner
          dopey = new Joiner("Dopey", sleepy),
          doc = new Joiner("Doc", grumpy);
        grumpy.interrupt();
      }
    }Sleeper是一个会睡上一段时间的Thread,至于睡多长时间,这要由构造函数的参数决定。Sleeper的run( )的sleep( )可以因时限到期而返回,也可以被interrupt( )打断。catch语句在报告中断的同时,会一并报告isInterrupted( )。当有别的线程调用了本线程的interrupt( )时,会设置一个标记以表示这个这个线程被打断了。当本线程捕获这个异常的时候,会清除这个标志。所以catch语句会永远报告说isInterrupted( )是false。这个标记是用来应付其它情况的,或许在没出异常的情况下,线程要用它来检查自己是不是被中断了。Joiner是另一个线程,它调用了Sleeper的join( ),所以它要等Sleeper醒过来。main( )创建了两个Sleeper分派给两个Joiner。你会发现,不论Sleeper是被打断还是正常结束,Joiner都会随Sleeper一道结束。