假设有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
可以使用join方法解决这个问题。比如在线程A中,调用线程B的join方法表示的意思就是:A等待B线程 执行完毕后(释放CPU执行权),在继续执行。
代码如下:
publicclassThreadTest { publicstaticvoidmain(String[] args) { Threadspring=newThread(newSeasonThreadTask("春天")); Threadsummer=newThread(newSeasonThreadTask("夏天")); 运行结果:Threadautumn=newThread(newSeasonThreadTask("秋天")); try { //春天线程先启动spring.start(); //主线程等待线程spring执行完,再往下执行spring.join(); //夏天线程再启动summer.start(); //主线程等待线程summer执行完,再往下执行summer.join(); //秋天线程最后启动autumn.start(); //主线程等待线程autumn执行完,再往下执行autumn.join(); } catch (InterruptedExceptione) { e.printStackTrace(); } } } classSeasonThreadTaskimplementsRunnable { privateStringname; publicSeasonThreadTask(Stringname){ this.name=name; } publicvoidrun() { for (inti=1; i<4; i++) { System.out.println(this.name+"来了: "+i+"次"); try { Thread.sleep(100); } catch (InterruptedExceptione) { e.printStackTrace(); } } } }
运行结果:
春天来了: 1次春天来了: 2次春天来了: 3次夏天来了: 1次夏天来了: 2次夏天来了: 3次秋天来了: 1次秋天来了: 2次秋天来了: 3次