What thread’s join method?
- The join method allows one thread to wait for the completion of another thread.
- Suppose we have couple of threads like thread1 & thread2.
- If in thread1, we have put thread2.join.
- Then, thread1 will wait for execution of thread2.
- Once thread2 finishes its execution then thread1 will resume its execution.
- There overload methods of join methods, which allow to specify a waiting period.
- The join method responds to an interrupt by exiting with an InterruptedException.
Join methods of thread class in java:
Method Name | Description |
---|---|
void join() | Waits for this thread to die. |
void join(long millis) | Waits at most millis milliseconds for this thread to die. |
void join(long millis, int nanos) | Waits at most millis milliseconds plus nanos nanoseconds for this thread to die. |
Algorithm: Demo of Join methods in multi-thread application
- Create a task by implementing Runnable interface.
- We will demonstrate join method and its impact on execution on multiple threads.
- We will write couple of methods
- demoThreadJoin: Method will create multiple threads ( four threads from 1 to 4).
- Output of a method will demonstrates the execution of join method.
- Threads will execute one after another (i.e. thread-1 to thread-4).
- demoWithoutThreadJoin: Method will demonstrate the execution of multiple threads without join method.
- Threads will execute randomly, there will be no sequence of thread execution.
- demoThreadJoin: Method will create multiple threads ( four threads from 1 to 4).
Program – thread join example with Runnable interface in java
package org.learn; class MyTask implements Runnable { @Override public void run() { String name = Thread.currentThread().getName(); try { System.out.printf( "Start of %s\n" ,name); Thread.sleep( 1500 ); System.out.printf( "End of %s\n" ,name); } catch (InterruptedException e) { e.printStackTrace(); } } } public class ThreadJoinExample { public static void main(String[] args) throws InterruptedException { MyTask task = new MyTask(); System.out.println( "1. Working with multiple threads using thread join:" ); demoThreadJoin(task); System.out.println( "2. Working with multiple threads WITHOUT thread join:" ); demoWithoutThreadJoin(task); } private static void demoWithoutThreadJoin(MyTask task) throws InterruptedException { Thread thread1 = new Thread(task, "Thread-1 without join" ); Thread thread2 = new Thread(task, "Thread-2 without join" ); Thread thread3 = new Thread(task, "Thread-3 without join" ); Thread thread4 = new Thread(task, "Thread-4 without join" ); //Start thread 1 thread1.start(); //Start thread 2 thread2.start(); //Start thread 3 thread3.start(); //Start thread 4 thread4.start(); } private static void demoThreadJoin(MyTask task) throws InterruptedException { Thread thread1 = new Thread(task, "Thread-1 using join" ); Thread thread2 = new Thread(task, "Thread-2 using join" ); Thread thread3 = new Thread(task, "Thread-3 using join" ); Thread thread4 = new Thread(task, "Thread-4 using join" ); //Start thread 1 thread1.start(); thread1.join(); //start thread 2 thread2.start(); thread2.join(); //Start thread 3 thread3.start(); thread3.join(); //start thread 4 thread4.start(); thread4.join(); } } |
Output – thread join example with Runnable interface in java
1. Working with multiple threads using thread join : Start of Thread-1 using join End of Thread-1 using join Start of Thread-2 using join End of Thread-2 using join Start of Thread-3 using join End of Thread-3 using join Start of Thread-4 using join End of Thread-4 using join 2. Working with multiple threads WITHOUT thread join : Start of Thread-1 without join Start of Thread-2 without join Start of Thread-4 without join Start of Thread-3 without join End of Thread-1 without join End of Thread-2 without join End of Thread-4 without join End of Thread-3 without join |