Deamon thread is a low priority thread that runs in background to perform tasks such as garbage collection, they do not prevent the JVM from exiting (even if the daemon thread itself is running) when all the user threads finish their execution. JVM terminates itself when all user threads finish their execution, JVM does not care whether daemon thread is running or not. If JVM finds running daemon thread (upon completion of user threads), it terminates the thread and after that shutdown itself.
Properties of Daemon threads:
A newly created thread inherits the daemon status of its parent. That’s the reason all threads created inside main method (child threads of main thread) are non-daemon by default, because main thread is non-daemon. However you can make a user thread to Daemon thread by using setDaemon() method of Thread class.
When the JVM starts, it creates a thread called “Main”. Your program will run on this thread, unless you create additional threads yourself. The first thing the “Main” thread does is to look for your static void main (String args) method and invoke it. That is the entry-point to your program. If you create additional threads in the main method those threads would be the child threads of main thread.
Methods of Thread class that are related to Daemon threads:
1. public void setDaemon(boolean status): This method is used for making a user thread to Daemon thread or vice versa. For example if I have a user thread t then t.setDaemon(true) would make it Daemon thread. On the other hand if I have a Daemon thread td then by calling td.setDaemon(false) would make it normal thread(user thread/non-daemon thread).
public boolean isDaemon(): This method is used for checking the status of a thread. It returns true if the thread is Daemon else it returns false.
2. setDaemon() method can only be called before starting the thread. This method would throw IllegalThreadStateException if you call this method after Thread.start() method.