Table of Contents [hide]
join()
method can be used to stop current execution of thread until thread it joins, completes its task. So basically, it waits for the thread on which join method is getting called, to die.For example:Here when you call
t1.join()
, main thread will wait for t1 to complete its start before resuming its execution.Variants of join methods
There are three variant of join method
public final void join() throws InterruptedException
Thread on which join method is getting called, to die.
public final void join(long millis) throws InterruptedException
This method when called on the thread, it waits for either of following:
- Thread on which join method is getting called, to die.
- Specified milliseconds
public final void join(long millis,int nanos) throws InterruptedException
This method when called on the thread, it waits for either of following:
- Thread on which join method is getting called, to die.
- Specified milliseconds + nano seconds
💡 Did you know?
If the thread, on which join method is called, has been already terminated or has not been started yet, then join method returns immediately.
Java Thread Join example
Let’s take a simple example:
Create ThreadExampleMain.java
When you run above program, you will get following output.
Thread 1 Start
Thread 1 end
Thread 2 Start
Thread 3 Start
Thread 2 end
Thread 3 end
Main thread execution ends
Lets analysis output now.
- Main thread execution starts.
Thread 1
starts(Thread 1 start) and as we have putt1.join()
, it will wait fort1
to die(Thread 1 end).Thread 2
starts(Thread 2 start) and waits for either 1 seconds or die, but as we have put sleep for 4 seconds in run method, it will not die in 1 second. so main thread resumes andThread 3
starts(Thread 3 start)- As we have put
t2.join()
andt3.join()
. These 2 threads will get completed before exiting main thread, so Thread 2 will end(Thread 2 end ) and then thread 3 will end(Thread 3 end). - Main thread execution ends.
Java Thread Join and Synchornization
Java thread join method guarantees happens before relationship.
It means if thread t1
calls t2.join()
, then all the changes done by t2 are visible to t1.
That’s all about Java Thread Join Example.