Daemon thread in java:
Daemon thread is a low priority thread providing services to the user thread. This thread runs in the background to perform tasks such as garbage collection.
Major Properties:
It cannot prevent the JVM from exiting when all the user threads finish their execution.
JVM terminates itself when all user threads finish their execution. If JVM finds a daemon thread running, it terminates the thread and after that shutdown itself.
Methods:
- void setDaemon (boolean status): It is used to set the current thread as daemon thread or user thread. For example, if we have a user thread m then m.setDaemon(true) will make it a daemon thread. If we have a daemon thread m then by invoking m.setDaemon(false) it will get converted into a user thread.
- boolean isDaemon ():
It is used to check that the current is daemon. It will return true if the thread is daemon else it returns false.
Exceptions in Daemon thread:
If we call the setDaemon() method after the thread has started, it will throw an exception named IllegalThreadStateException.
A sample example 1 :
File Name: MyNewThread.java
public class DaemonTh1 extends Thread{
public void run (){
// checking whether the current thread is a daemon thread
if(Thread.currentThread().isDaemon()){
System.out.println (“The daemon thread is now working”);
}
else {
System.out.println (“The user thread is now working”);
}
}
public static void main (String[] args){
// thread creation
DaemonTh1 th1= new DaemonTh1 ();
DaemonTh1 th2= new DaemonTh1();
DaemonTh1 th3= new DaemonTh1 ();
// now th1 becomes a daemon thread
th1.setDaemon(true);
//starting threads
th1.start();
th2.start();
th3.start();
}
}
Output:
The daemon thread is now working
The user thread is now working
The user thread is now working
A sample example 2 :
File Name: MySecondThread.java
class DaemonTh2 extends Thread {
public void run() {
System.out.println (“Name: ” + Thread.currentThread().getName());
System.out.println (“Daemon: ” + Thread.currentThread().isDaemon());
}
public static void main(String[] args) {
DaemonTh2 t1= new DaemonTh2();
DaemonTh2 t2= new DaemonTh2();
// starting threads
t1.start();
// exception will be thrown here
t1.setDaemon (true);
t2.start();
}
}
Output:
exception in thread main: java.lang.IllegalThreadStateException
Daemon vs User Threads (Comparison) :
- Priority: When the daemon threads are the only threads, the interpreter exits. This happens because when only daemon threads remain, there is no other thread for which a daemon thread can provide a service.
- Usage: Daemon thread is to provide services to user thread for background supporting processes.