线程4 : public class TestThread4 ... { public static void main(String args[])...{ Runner4 r = new Runner4(); Thread t = new Thread(r); t.start(); for(int i=0;i<100000;i++)...{ if(i%10000==0 & i>0) System.out.println("in thread main i=" + i); } System.out.println("Thread main is over"); r.shutDown(); //t.stop(); }} class Runner4 implements Runnable ... { private boolean flag=true; public void run() ...{ int i = 0; while (flag==true) ...{ System.out.print(" " + i++); } } public void shutDown() ...{ flag = false; }} 线程5: public class TestThread5 ... { public static void main(String args[])...{ Runner5 r = new Runner5(); Thread t = new Thread(r); t.start(); try...{ t.join();//这个方法其实就是特殊的wait,wait方法一般都需要别人notify(当然也可以设置超时),但是join方法就不需要别人notify了 }catch(InterruptedException e)...{ } for(int i=0;i<50;i++)...{ System.out.println("主线程:" + i); } }} class Runner5 implements Runnable ... { public void run() ...{ for(int i=0;i<50;i++) ...{ System.out.println("SubThread: " + i); } }}