join public final void join(long millis,
                       int nanos)
                throws InterruptedException Waits at most millis milliseconds plus nanos nanoseconds for this thread to die.Parameters:millis - the time to wait in milliseconds.nanos - 0-999999 additional nanoseconds to wait.Throws:IllegalArgumentException - if the value of millis is negative the value of nanos is not in the range 0-999999.InterruptedException - if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown

解决方案 »

  1.   

    package test;
    import java.io.*;
    public class MethodTest {
        static PrintWriter out = new PrintWriter(System.out,true);
        public static void main(String[] args) {
            FirstThread first = new FirstThread();
            SecondThread second = new SecondThread();
            first.start();
            second.start();
    //本来程序中只有主线程,现在多了两个线程
            try{
            out.println("Waiting for first thread to finish...");
            first.join();
    //join的意思就是说先让主线程等待,运行first线程,等first的run方法结束后
    //再接着运行主线程
            out.println("It's a long wait!");
            out.println("Wakong up second thread...");
            synchronized(second){
                second.notify();
            }
            out.println("Waiting for second thread to finish...");
            second.join();
    //与上面的一样,让主线程等待,运行second的run方法
            }catch(InterruptedException e){
            }
            out.println("I'm ready to finish too.");
        }}
        class FirstThread extends Thread{
            public void run(){
                try{
                    MethodTest.out.println(" First thread starts running.");
                    sleep(10000);
                    MethodTest.out.println(" First thread finishes running.");
                }catch(InterruptedException e){
                }
            }
        }
        class SecondThread extends Thread{
            public synchronized void run(){
                try{
                    MethodTest.out.println(" Second thread starts running.");
                    MethodTest.out.println(" Second thread suspends itself.");
                    wait();
                    MethodTest.out.println(" Second thread runs again and finishes.");
                }catch(InterruptedException e){
                }
            }
        }
    你可以先运行一下试试,然后再去掉两处join,比较结果