Friday 20 April 2018

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

No comments:

Post a Comment

Spring boot with CORS

CORS (Cross-Origin Resource Sharing) errors occur when a web application running in a browser requests a resource from a different domain or...