Join

Put a thread to sleep until another thread finishes.

/*
 * The join method allows one thread to wait for the completion of another.
 */
public class JoinExample
{
    public static Thread createThread(String name, long napTime)
    {
        final long sleepTime = napTime;
 
        Runnable r = new Runnable()
        {
 
            public void run()
            {
                try
                {
                    print("in run() - entering");
                    Thread.sleep(sleepTime);
                } catch (Exception e)
                {
                    print("interrupted!");
                } finally
                {
                    print("in run() - leaving");
                }
 
            }
 
        };
 
        Thread t = new Thread(r, name);
        t.start();
 
        return t;
    }// end to createThread()
 
    private static void print(String msg)
    {
        String name = Thread.currentThread().getName();
        System.out.println(name + ": " + msg);
    }
 
    public static void main(String[] args)
    {
        Thread[] t = new Thread[3];
 
        t[0] = createThread("thread A", 3000);
        t[1] = createThread("thread B", 2000);
        t[2] = createThread("thread C", 1000);
 
        for (int i = 0; i < t.length; i++)
        {
            try
            {
                String idxStr = "thread[" + i + "]";
                String name = "[" + t[i].getName() + "]";
 
                print(idxStr + ".isAlive()=" + t[i].isAlive() + " " + name);
                print("about to do: " + idxStr + ".join() " + name);
 
                long start = System.currentTimeMillis();
                t[i].join(); // wait for the thread to die
                long stop = System.currentTimeMillis();
 
                print(idxStr + ".join() - took " + (stop - start) + " ms "
                        + name);
            } catch (InterruptedException x)
            {
                print("interrupted waiting on #" + i);
            }
        }
    }
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.