Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding join() method example

The Java thread join() method confuses me a bit. I have following example

class MyThread extends Thread {
    private String name;
    private int sleepTime;
    private Thread waitsFor;

    MyThread(String name, int stime, Thread 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+"] ");

And

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();
    }
}

In which order are the threads terminated?

like image 322
UpCat Avatar asked May 03 '11 16:05

UpCat


2 Answers

What actually confuses you about Thread.join()? You haven't mentioned anything specific.

Given that Thread.join() (as the documentation states), Waits for this thread to die, then t4 will wait for t3 to complete, which will wait for t2 to complete, which will wait for t1 to complete.

Therefore t1 will complete first, followed by t2, t3, and t4.

like image 136
matt b Avatar answered Sep 29 '22 11:09

matt b


It would terminate in order t1, t2, t3, t4... join causes the currently executing thread to wait until the thread it is called on terminates.

like image 35
Lawrence McAlpin Avatar answered Sep 29 '22 10:09

Lawrence McAlpin