Java Thread Join Example with Explanation

Java Thread join method can be used to pause the current thread execution until unless the specified thread is dead. There are three overloaded join functions.

public final void join(): This method puts the current thread on wait until the thread on which it’s called is dead. If the thread is interrupted, it throws InterruptedException.

public final synchronized void join(long millis): This method is used to wait for the thread on which it’s called to be dead or wait for specified milliseconds. Since thread execution depends on OS implementation, it doesn’t guarantee that the current thread will wait only for given time.

public final synchronized void join(long millis, int nanos): This method is used to wait for thread to die for given milliseconds plus nanoseconds.

Here is a simple example showing usage of Thread join methods. The goal of the program is to make sure main is the last thread to finish and third thread starts only when first one is dead.

package com.journaldev.threads;

public class ThreadJoinExample {

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable(), "t1");
        Thread t2 = new Thread(new MyRunnable(), "t2");
        Thread t3 = new Thread(new MyRunnable(), "t3");
        //start second thread after waiting for 2 seconds or if it's dead
        try {
        } catch (InterruptedException e) {
        //start third thread only when first thread is dead
        try {
        } catch (InterruptedException e) {
        //let all threads finish execution before finishing main thread
        try {
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
        System.out.println("All threads are dead, exiting main thread");


class MyRunnable implements Runnable{

    public void run() {
        System.out.println("Thread started:::"+Thread.currentThread().getName());
        try {
        } catch (InterruptedException e) {
        System.out.println("Thread ended:::"+Thread.currentThread().getName());

Output of the above program is:

Thread started:::t1
Thread ended:::t1
Thread started:::t2
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread

About Pankaj

If you have come this far, it means that you liked what you are reading. Why not reach little more and connect with me directly on Google Plus, Facebook or Twitter. I would love to hear your thoughts and opinions on my articles directly.

Recently I started creating video tutorials too, so do check out my videos on Youtube.

I read a lot of books, below is the one I am currently reading.

Apart from that below are some of the recently read whitepapers. They are absolutely free to download.

Some of the video tutorials on Udemy I would recommend are;

NOTE: All the above video tutorial series are on huge discount now for $10 only, use Promo Code SUMMER1001

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Subscribe to JournalDev Newsletter
Get the FREE access to JournalDev Newsletter and Free PDF eBooks
*No Spam Guaranteed. By entering your email address, you agree also subscribing to our newsletter.
Oops! - Something went wrong.
HTML5 Security Cheat Sheet PDF eBook FREE Download Now
Video Tutorial Series at 95% Discount, use Coupon Code 'SCOREASKILL' Enroll Now