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,比较结果
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