Category Archives: join

Run main thread before child thread.

As we all know in multi threading we cant guarantee the order of execution of threads .So in this example i will show you how to make sure one method calls after another.

To implement this we are going to use JOIN() concept of multi threading.


Join() : The join method allows one thread to wait for the completion of another. 

 MyThread1 t1 = new MyThread1();


if t1 is a Thread object whose thread is currently executing.
t1.join(); causes the current thread to pause execution until t1 thread terminates.

So to execute main thread before child thread it should call join method on main thread and hence child thread has to wait until competing of main thread.

Ruuner class: 

package com.thread;

public class ThreadRun {

//Main Thread
public static void main(String args[]) {
//Main thread reference
MyThread1.
mainThread= Thread.currentThread();
  //Thread T-1
MyThread1 t1 = new MyThread1();
t1.setName("t1");
t1.start();

//Main thread logic
for (int i = 0; i < 5; i++) {
System.out.println("Main Thread");
}
}

}
Child Thread class:

package com.thread;

public class MyThread1 extends Thread {
 //static thread to access in other class
static Thread mainThread;

public void run() {

try {
  // Child thread wait here until main completed
mainThread.
join();
}
catch (InterruptedException e1) {
e1.
printStackTrace();
}

//Thread -1 logic
for (int i = 0; i < 5; i++) {
System.
out.println("child Thread -1 " + Thread.currentThread().getName());
try {
Thread.
sleep(1000);
}
catch (Exception e) {
System.
out.println(e);
}
}
}
}

Output:
Main Thread
Main Thread
Main Thread
Main Thread
Main Thread
child Thread -1 t1
child Thread -1 t1
child Thread -1 t1
child Thread -1 t1
child Thread -1 t1

74 total views, no views today

Join on multiple threads in java

Join() : If a thread (name it T1) calls the join method on another Thread named T2, then T1 waits for T2 to complete its execution before it continues from that point.

below is the example of thread join .


Thread 1:
package com.thread;

public class MyThread1 extends Thread {

 public void run() {

  //Thread T-2 
  MyThread2 t2 = new MyThread2();
  t2.setName("t2");
  //T2 started
  t2.start();

  try {
   //Thread T-1 wait till Thread T-2 get completed
   t2.join();
   
  } catch (InterruptedException e1) {
   e1.printStackTrace();
  }

  //Thread -1  logic
  for (int i = 0; i < 5; i++) {
   System.out.println("child Thread -1 " + Thread.currentThread().getName());
   try {
    Thread.sleep(1000);
   } catch (Exception e) {
    System.out.println(e);
   }
  }
 }
}
Thread 2:

package com.thread;

public class MyThread2 extends Thread {

 public void run() {
  
  //Thread -2 logic
  for (int i = 0; i < 5; i++) {
   System.out.println("child Thread -2 " + Thread.currentThread().getName());
   try {
    Thread.sleep(1000);
   } catch (Exception e) {
    System.out.println(e);
   }
  }
 }
}
Thread runner class:
package com.thread;

public class ThreadRun {

 //Main Thread
 public static void main(String args[]) {
  
  //Thread T-1
  MyThread1 t1 = new MyThread1();
  t1.setName("t1");
  
  try {
   //start thread T-1
   t1.start();
   //Main thread wait for T1 to complete
   t1.join();
   
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  
  //Main thread logic
  for (int i = 0; i < 5; i++) {
   System.out.println("Main Thread");
  }
 }

}
Output:
child Thread -2 t2
child Thread -2 t2
child Thread -2 t2
child Thread -2 t2
child Thread -2 t2
child Thread -1 t1
child Thread -1 t1
child Thread -1 t1
child Thread -1 t1
child Thread -1 t1
Main Thread
Main Thread
Main Thread
Main Thread
Main Thread

101 total views, no views today