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