What is a daemon thread in Java?
A daemon thread is a thread that does not prevent the JVM from exiting when the program finishes but the thread is still running. An example for a daemon thread is the garbage collection.
You can use the setDaemon(boolean)
method to change the Thread
daemon properties before the thread starts.
A few more points (Reference: Java Concurrency in Practice)
- When a new thread is created it inherits the daemon status of itsparent.
When all non-daemon threads finish, the JVM halts, and any remaining daemon threads are abandoned:
- finally blocks are not executed,
- stacks are not unwound - the JVM just exits.
Due to this reason daemon threads should be used sparingly, and it is dangerous to use them for tasks that might perform any sort of I/O.
All the above answers are good. Here's a simple little code snippet, to illustrate the difference. Try it with each of the values of true and false in setDaemon
.
public class DaemonTest { public static void main(String[] args) { new WorkerThread().start(); try { Thread.sleep(7500); } catch (InterruptedException e) { // handle here exception } System.out.println("Main Thread ending") ; }}class WorkerThread extends Thread { public WorkerThread() { // When false, (i.e. when it's a non daemon thread), // the WorkerThread continues to run. // When true, (i.e. when it's a daemon thread), // the WorkerThread terminates when the main // thread or/and user defined thread(non daemon) terminates. setDaemon(true); } public void run() { int count = 0; while (true) { System.out.println("Hello from Worker "+count++); try { sleep(5000); } catch (InterruptedException e) { // handle exception here } } }}