Groovy Operators

Control Statements

Groovy File Handling

Groovy Error & Exceptions

Groovy Multithreading

Groovy Synchronization

Groovy - Daemon Thread



A Daemon thread is created to support the user threads. It generallty works in background and terminated once all the other threads are closed. Garbage collector is one of the example of Daemon thread.

Characteristics of a Daemon Thread in Groovy

  • A Daemon thread is a low priority thread.

  • A Daemon thread is a service provider thread and should not be used as user thread.

  • JVM automatically closes the daemon thread(s) if no active thread is present and revives it if user threads are active again.

  • A daemon thread cannot prevent JVM to exit if all user threads are done.

Thread Class Methods for Groovy Daemon Thread

The following are the methods provided by the Thread class for Daemon Thread in Groovy −

  • Thread.setDaemon() Method− Marks this thread as either a daemon thread or a user thread.

  • Thread.isDaemon() Method− Checks if this thread is a daemon thread.

Example - Daemon Thread Check

In this example, we've created a ThreadDemo class which extends Thread class. In main method, we've created three threads. As we're not setting any thread as daemon thread, no thread is marked as daemon thread.

Example.groovy

class Example {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  ThreadDemo thread3 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
	  thread3.start();
   }
}
class ThreadDemo extends Thread {
   public void run() {
      println("Thread  " + Thread.currentThread().getName() 
         + ", is Daemon: " + Thread.currentThread().isDaemon());
   }
   public void start () {     
      super.start();
   }
}

Output

The above program produces the following output −

Thread  Thread-1, is Daemon: false
Thread  Thread-0, is Daemon: false
Thread  Thread-2, is Daemon: false

Example - Setting a thread as Daemon Thread

In this example, we've created a ThreadDemo class which extends Thread class. In main method, we've created three threads. As we're setting one thread as daemon thread, one thread will be printed as daemon thread.

Example.groovy

class Example {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  ThreadDemo thread3 = new ThreadDemo();
      thread3.setDaemon(true);
	  thread1.start();
	  thread2.start();
	  thread3.start();
   }
}
class ThreadDemo extends Thread {
   void run() {
      println("Thread  " + Thread.currentThread().getName() 
         + ", is Daemon: " + Thread.currentThread().isDaemon());
   }
   void start () {     
      super.start();
   }
}

Output

The above program produces the following output −

Thread  Thread-1, is Daemon: false
Thread  Thread-2, is Daemon: true
Thread  Thread-0, is Daemon: false

Example - Trying to Set a running thread as Daemon

In this example, we've created a ThreadDemo class which extends Thread class. In main method, we've created three threads. Once a thread starts, it cannot be set as daemon thread. As we're setting one thread as daemon thread after it started, a runtime exception will be raised.

class ThreadDemo extends Thread {
   void run() {
      println("Thread  " + Thread.currentThread().getName() 
         + ", is Daemon: " + Thread.currentThread().isDaemon());
   }
   void start () {     
      super.start();
   }
}
class TestThread {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  ThreadDemo thread3 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
	  thread3.start();
      thread3.setDaemon(true);
   }
}

Output

The above program produces the following output −

Thread  main, is Daemon: false
Advertisements