看线程的时候这里老看不明,谁能具体说说吗?最好能举个例子。谢谢。

解决方案 »

  1.   

    /**
         * Waits at most <code>millis</code> milliseconds for this thread to 
         * die. A timeout of <code>0</code> means to wait forever. 
         *
         * @param      millis   the time to wait in milliseconds.
         * @exception  InterruptedException if another thread has interrupted
         *             the current thread.  The <i>interrupted status</i> of the
         *             current thread is cleared when this exception is thrown.
         */
      

  2.   

    MyThread implements Runnable{
       public void run(){
           System.out.println("线程退出");
       }
       public static void main(String[] args){
           Thread t=new Thread(new MyThread());
           t.start();
           t.join();
           System.out.prinln("那个线程已经死了!");
       }}
      

  3.   

    void join() 
              Waits for this thread to die.  void join(long millis) 
              Waits at most millis milliseconds for this thread to die.  void join(long millis, int nanos) 
              Waits at most millis milliseconds plus nanos nanoseconds for this thread to die. 
      

  4.   

    稍微修改了一下 treeroot(根根) 的程序,这样更直观一些:
    public class MyThread implements Runnable{
       public void run(){
           System.out.println("线程开始");
       }
       public static void main(String[] args){
          Thread t=new Thread(new MyThread());
          t.start();
          try{
            System.out.println(t.isAlive());
             t.join();
             System.out.println("线程已退出");
             System.out.println(t.isAlive());
            
          }catch(java.lang.InterruptedException ex){
           System.out.println(ex);
            System.out.println("那个线程已经死了!");
          }
       }}
      

  5.   

    线程A调用如下方法:
    线程B.join();
    则线程A会在此处进入休眠状态,直到线程B执行完毕,线程A才会继续执行,至于是立即获得CPU还是进入等待状态竞争CPU,API文档中并没有说明,不得而知啊,哪位高手知道?
      

  6.   

    线程还能调用另一个线程的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一道结束。
      

  7.   

    jiangnanyuzi(江南愚子) 线程A调用如下方法:
    线程B.join();
    则线程A会在此处进入休眠状态,直到线程B执行完毕,线程A才会继续执行,至于是立即获得CPU还是进入等待状态竞争CPU,API文档中并没有说明,不得而知啊,哪位高手知道?--------------------------------------------------------------------------------------还真没有想过。先去上课,回来再说。