Daemon thread in Java

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:

  1. 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.
  2. 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) :

  1. 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.
  2. Usage: Daemon thread is to provide services to user thread for background supporting processes.