Join.java
/*
* Copyright@ 2011 www.egtry.com
*/
package egtry.thread;
//join - wait on the target thread to finish
public class Join extends Thread {
private Join child;
public static void main(String[] args) {
Join join=new Join(10);
join.start();
System.out.println("All Done");
}
public Join(int number) {
super(""+number);
if (number >0) {
child=new Join(number-1);
}
}
@Override
public void run() {
System.out.println("Start Thread: "+this.getId());
if (child!=null) {
child.start();
try {
child.join();
} catch (InterruptedException e) {
System.out.println("Interrupted: Thread: "+this.getId()+" wait on its child thread:"+child.getId());
}
}
System.out.println("End Thread: "+this.getId());
}
}
Output
All Done
Start Thread: 8
Start Thread: 9
Start Thread: 10
Start Thread: 11
Start Thread: 12
Start Thread: 13
Start Thread: 14
Start Thread: 15
Start Thread: 16
Start Thread: 17
Start Thread: 18
End Thread: 18
End Thread: 17
End Thread: 16
End Thread: 15
End Thread: 14
End Thread: 13
End Thread: 12
End Thread: 11
End Thread: 10
End Thread: 9
End Thread: 8