The join method allows one thread to wait for the completion of another. If t is a Thread object whose thread is currently executing, java
t.join();
causes the current thread to pause execution until t's thread terminates. Overloads of join allow the programmer to specify a waiting period. However, as with sleep, join is dependent on the OS for timing, so you should not assume that join will wait exactly as long as you specify. this
Like sleep, join responds to an interrupt by exiting with an InterruptedException. code
class MyThread extends Thread { private String name; private int sleepTime; private Thread waitsFor; MyThread(String name, int stime, Thread wa) { this.name = name; this.sleepTime = stime; this.waitsFor = wa; } public void run() { System.out.print("[" + name + " "); try { Thread.sleep(sleepTime); } catch (InterruptedException ie) { } System.out.print(name + "? "); if (!(waitsFor == null)) try { waitsFor.join(); } catch (InterruptedException ie) { } System.out.print(name + "] "); } }
public class JoinTest2 { public static void main (String [] args) { Thread t1 = new MyThread("1",1000,null); Thread t2 = new MyThread("2",4000,t1); Thread t3 = new MyThread("3",600,t2); Thread t4 = new MyThread("4",500,t3); t1.start(); t2.start(); t3.start(); t4.start(); } }