Java Multithreading - join() method
Java Multithreading - join method
When join() is invoked on a particular thread, the current thread waits for the invoked thread to terminate. Once the invoked thread dies, the current thread continues its execution
Consider the below example when multiple threads execute and join() method is NOT used
Java Thread Example - Threads without join
public class ThreadWithoutJoin implements Runnable{
String threadName;
int sum=0;
public ThreadWithoutJoin(String name){
this.threadName=name;
}
public void run(){
try{
Thread.sleep(1000);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
for(int i=0;i<1000;i++){
sum=sum+i;
}
}
public void printSum(){
System.out.println(threadName+ ":"+sum);
}
public static void main(String a[]) {
ThreadWithoutJoin te1= new ThreadWithoutJoin("Thread1");
ThreadWithoutJoin te2= new ThreadWithoutJoin("Thread2");
ThreadWithoutJoin te3= new ThreadWithoutJoin("Thread3");
ThreadWithoutJoin te4= new ThreadWithoutJoin("Thread4");
Thread thread1=new Thread(te1);
Thread thread2=new Thread(te2);
Thread thread3=new Thread(te3);
Thread thread4=new Thread(te4);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
te1.printSum();
te2.printSum();
te3.printSum();
te4.printSum();
}
}
Output - ThreadWithoutJoin
Thread1:0 Thread2:0 Thread3:0 Thread4:0
In the above example, main thread terminates before the 4 invoked threads thread1, thread2, thread3 and thread4 complete calculating the sum and hence the result expected is not printed. If Thread join() method is called on each of the instance, the main thread waits until each of invoked instance completes the calculation and terminates.
Java Thread Example - MultiThreading using join
public class ThreadJoinExample implements Runnable{
String threadName;
int sum=0;
public ThreadJoinExample(String name){
this.threadName=name;
}
public void run(){
try{
Thread.sleep(1000);
}
catch(InterruptedException ie){
ie.printStackTrace();
}
for(int i=0;i<1000;i++){
sum=sum+i;
}
}
public void printSum(){
System.out.println(threadName+ ":"+sum);
}
public static void main(String a[]) {
ThreadJoinExample te1= new ThreadJoinExample("Thread1");
ThreadJoinExample te2= new ThreadJoinExample("Thread2");
ThreadJoinExample te3= new ThreadJoinExample("Thread3");
ThreadJoinExample te4= new ThreadJoinExample("Thread4");
Thread thread1=new Thread(te1);
Thread thread2=new Thread(te2);
Thread thread3=new Thread(te3);
Thread thread4=new Thread(te4);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
try {
thread1.join();
thread2.join();
thread3.join();
thread4.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
te1.printSum();
te2.printSum();
te3.printSum();
te4.printSum();
}
}
Output - MultiThreading using join
Thread1:499500 Thread2:499500 Thread3:499500 Thread4:499500