Tutorial

Java Thread Join Example

Published on August 3, 2022
author

Pankaj

Java Thread Join Example

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

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.

Java Thread join

java thread join, thread join example, java thread join example, thread join public final void join(): This java thread join 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 java thread join 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 java thread join 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");
        
        t1.start();
        
        //start second thread after waiting for 2 seconds or if it's dead
        try {
            t1.join(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t2.start();
        
        //start third thread only when first thread is dead
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t3.start();
        
        //let all threads finish execution before finishing main thread
        try {
            t1.join();
            t2.join();
            t3.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("All threads are dead, exiting main thread");
    }

}

class MyRunnable implements Runnable{

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

Output of the above program is:

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

That’s all for a quick roundup on java thread join example.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products


About the authors
Default avatar
Pankaj

author

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
February 6, 2019

Why does t2 start before t1 ends? and t3 start before t2 ends?

- asdqqwe

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    February 7, 2018

    t2.start(); //start third thread only when first thread is dead try { t1.join(); It should be t2.join() instead of t1.join()

    - Anon

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      January 15, 2018

      Hi, What i need to use for Join thread in ExceutorService?

      - manish

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        September 21, 2017

        I have one doubt, as we can see in the implementation of the join() method , it waits until thread isAlive() method returen true. Now the question is when wait() is called on instance of the thread , it would be disabled for thread scheduling, So if i am calling join() on any thread instance , would it ever get chance to execute the code in run method as it is waiting in a loop over isAlive() method.

        - Siddharth

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          November 11, 2016

          Hi, I have one question in this, if t1 thread execution fails with NullPointer Exception , I need to stop the main thread or we have to capture wich thread is failed. Could you please explains this.

          - Eswar

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            July 25, 2016

            Best Example so Far. Thanks a lot to making join looks so easy.

            - Kamal Thakur

              JournalDev
              DigitalOcean Employee
              DigitalOcean Employee badge
              October 18, 2015

              Great explanations.This is wat needed…

              - pradpalnis

                JournalDev
                DigitalOcean Employee
                DigitalOcean Employee badge
                September 25, 2015

                U are fab pankaj.

                - kumkum

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  September 4, 2015

                  Simple but informative article:) Keep up the good work bro:) If possible pls add more articles to collection framework internals.

                  - Gopinath

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    August 26, 2015

                    I have doubt if we called join() without thread refference just like public void m1()throws Exception { join(); } what happened

                    - guru ghule

                      Try DigitalOcean for free

                      Click below to sign up and get $200 of credit to try our products over 60 days!

                      Sign up

                      Join the Tech Talk
                      Success! Thank you! Please check your email for further details.

                      Please complete your information!

                      Featured on Community

                      Get our biweekly newsletter

                      Sign up for Infrastructure as a Newsletter.

                      Hollie's Hub for Good

                      Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

                      Become a contributor

                      Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

                      Welcome to the developer cloud

                      DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

                      Learn more
                      DigitalOcean Cloud Control Panel