Groovy Operators

Control Statements

Groovy File Handling

Groovy Error & Exceptions

Groovy Multithreading

Groovy Synchronization

Groovy - Starting a Thread



Starting a Thread

Once a Thread object is created, you can start it by calling start() method, which executes a call to run() method. Following is a simple syntax of start() method −

void start();

Syntax - Starting a Thread

The following is the syntax of starting a thread −

thread_obj.start();

Here, thread_obj is an object to the Thread class, and start() is the method of the Thread class.

Example - Starting a Thread by Implementing Runnable Interface

In this example, we're creating a class RunnableDemo by implementing Runnable interface. RunnableDemo class has run() method implementation. In main class TestThread, we've created the RunnableDemo objects and using those objects we've created two Thread objects. When Thread.start() method is called on each thread objects, threads start processing and program is executed.

Example.groovy

class Example {
   static void main(String[] args) {
	  RunnableDemo runnableDemo1 = new RunnableDemo( "Thread-1");
	  RunnableDemo runnableDemo2 = new RunnableDemo( "Thread-2");	  
	  Thread thread1 = new Thread(runnableDemo1);
	  Thread thread2 = new Thread(runnableDemo2);
	  thread1.start();
	  thread2.start();
   }
}
class RunnableDemo implements Runnable {
   private String threadName;
   RunnableDemo( String name) {
      threadName = name;
      println("Thread: " + threadName + ", " + "State: New");
   }
   void run() {
      println("Thread: " + threadName + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + threadName + ", " + i);         
      }
      println("Thread: " + threadName + ", " + "State: Dead");
   }
}

Output

The above program produces the following output −

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: Thread-1, State: Running
Thread: Thread-2, State: Running
Thread: Thread-1, 4
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-1, 2
Thread: Thread-2, 1
Thread: Thread-1, 1
Thread: Thread-2, State: Dead
Thread: Thread-1, State: Dead

Example - Starting a Thread by Extending Thread Class

Here is the preceding program rewritten to extend the Thread − In this example, we've created a ThreadDemo class which extends Thread class. We're calling super(name) in constructor() method to assign a name to the thread and called super.start() to start the thread processing.

Example.groovy

class Example {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	  ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	  thread1.start();
	  thread2.start();
   }
}
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      println("Thread: " + name + ", " + "State: New");
   }
   void run() {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + Thread.currentThread().getName() + ", " + i); 
      }
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   void start () {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

Output

The above program produces the following output −

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-1, State: Running
Thread: Thread-2, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-1, State: Dead
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

Example - Start a Thread (with Demonstrating sleep() method)

In this example, we're creating couple of objects of ThreadDemo class which extends Thread class. We're calling super(name) in constructor() method to assign a name to the thread and called super.start() to start the thread processing. Using sleep() method, we're introducing the delay in processing.

Example.groovy

class TestThread {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	  ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	  thread1.start();
	  thread2.start();
   }
}
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      println("Thread: " + name + ", " + "State: New");
   }
   void run() {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + Thread.currentThread().getName() + ", " + i); 
         try {
			Thread.sleep(50);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
      }
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   public void start () {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

Output

The above program produces the following output −

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-2, State: Running
Thread: Thread-1, State: Running
Thread: Thread-2, 4
Thread: Thread-1, 4
Thread: Thread-2, 3
Thread: Thread-1, 3
Thread: Thread-2, 2
Thread: Thread-1, 2
Thread: Thread-2, 1
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Dead
Advertisements