Groovy Operators

Control Statements

Groovy File Handling

Groovy Error & Exceptions

Groovy Multithreading

Groovy Synchronization

Groovy - Thread Control



Groovy provides complete control over multithreaded program. You can develop a multithreaded program which can be suspended, resumed, or stopped completely based on your requirements. There are various static methods which you can use on thread objects to control their behavior.

Methods for Controlling Groovy Thread

Following table lists down the methods for controlling a thread in Groovy −

Sr.No. Method & Description
1

public void suspend()

This method puts a thread in the suspended state and can be resumed using resume() method.

2

public void stop()

This method stops a thread completely.

3

public void resume()

This method resumes a thread, which was suspended using suspend() method.

4

public void wait()

Causes the current thread to wait until another thread invokes the notify().

5

public void notify()

Wakes up a single thread that is waiting on this object's monitor.

Example - Thread Control in Groovy

Example.groovy

class Example {
   static void main(String[] args) {
      RunnableDemo r1 = new RunnableDemo( "Thread-1");
      r1.start();

      RunnableDemo r2 = new RunnableDemo( "Thread-2");
      r2.start();

      try {
         Thread.sleep(1000);
         r1.suspend();
         println("Suspending First Thread");
         Thread.sleep(1000);
         r1.resume();
         println("Resuming First Thread");
         
         r2.suspend();
         println("Suspending thread Two");
         Thread.sleep(1000);
         r2.resume();
         println("Resuming thread Two");
      } catch (InterruptedException e) {
         println("Main thread Interrupted");
      }
	  
      try {
         println("Waiting for threads to finish.");
         r1.t.join();
         r2.t.join();
      } catch (InterruptedException e) {
         println("Main thread Interrupted");
      }
      println("Main thread exiting.");
   }
}
class RunnableDemo implements Runnable {
   Thread t;
   private String threadName;
   boolean suspended = false;

   RunnableDemo( String name) {
      threadName = name;
      println("Creating " +  threadName );
   }
   
   void run() {
      println("Running " +  threadName );
      try {
         for(int i = 10; i > 0; i--) {
            println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(300);
            synchronized(this) {
               while(suspended) {
                  wait();
               }
            }
         }
      } catch (InterruptedException e) {
         println("Thread " +  threadName + " interrupted.");
      }
      println("Thread " +  threadName + " exiting.");
   }

   void start () {
      println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
   
   void suspend() {
      suspended = true;
   }
   
   synchronized void resume() {
      suspended = false;
      notify();
   }
}

Output

The above program produces the following output −

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 10
Running Thread-2
Thread: Thread-2, 10
Thread: Thread-1, 9
Thread: Thread-2, 9
Thread: Thread-1, 8
Thread: Thread-2, 8
Thread: Thread-1, 7
Thread: Thread-2, 7
Suspending First Thread
Thread: Thread-2, 6
Thread: Thread-2, 5
Thread: Thread-2, 4
Resuming First Thread
Suspending thread Two
Thread: Thread-1, 6
Thread: Thread-1, 5
Thread: Thread-1, 4
Thread: Thread-1, 3
Resuming thread Two
Thread: Thread-2, 3
Waiting for threads to finish.
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.
Main thread exiting.
Advertisements