Skip to main content

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

Comments

Popular posts from this blog

Extent report plugin for cucumber framework

Extent Reports  are the most popular  reporting  used with Selenium. ExtentReport API makes our life easy to generate interactive  report  with simple configuartions. It supports almost all Java and .NET test frameworks such as TestNG , JUnit , NUnit etc Here we are discussing about  a plugin which is build on  Extent Report specially for Cucumber. This plugin is used to simple out the implementation of  Extent Report  in  Cucumber Framework .  We are creating a maven project to implement the integration of our plugin with cucumber 1. Create new maven project in any tool eclipse/sts/intellij 2. Open pom.xml and update below entries. Step 1 : Add Cucumber Extent Reporter library to Maven Project Add  cucumber-extentsreport <dependency>      <groupId> com.vimalselvam </groupId>      <artifactId> cucumber-extentsreport </artif...

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.

  In order to make projects compile with the existing builds of Lombok processor, as a workaround you can use the flag -Djps.track.ap.dependencies=false which should be added to File | Settings | Build, Execution, Deployment | Compiler | Build process VM options field. This will disable collection of dependencies specified by an annotation processor when Filer methods are called

Failure to transfer https://repo.maven.apache.org/maven2 was cached in the local repository

Error : Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.17 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-surefire-plugin:pom:2.17 from/to central (https://repo.maven.apache.org/maven2): The operation was cancelled. pom.xml /LogReaderServer line 1 Maven Configuration Problem Solution : Remove all your failed downloads: For windows: cd %userprofile%\.m2\repository for /r %i in (*.lastUpdated) do del %i