Course
Daemon Thread
Java Tutorial
This Java tutorial is tailored for newcomers, offering a journey from basic principles to complex Java programming techniques. Completing this tutorial equips you with a solid understanding of Java, preparing you for advanced learning. You'll emerge ready to tackle the challenges of becoming a top-tier software engineer, with the skills to innovate and excel in the vast world of software development.
Daemon Thread
Daemon Thread in Java
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 Java
- 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 Java Daemon Thread
Example of Java 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 not setting any thread as daemon thread, no thread is marked as daemon thread.
package com.tutorialspoint;class ThreadDemo extends Thread { ThreadDemo( ) { } public void run() { System.out.println("Thread " + Thread.currentThread().getName() + ", is Daemon: " + Thread.currentThread().isDaemon()); } public void start () { super.start(); }}public class TestThread { public static void main(String args[]) { ThreadDemo thread1 = new ThreadDemo(); ThreadDemo thread2 = new ThreadDemo(); ThreadDemo thread3 = new ThreadDemo(); thread1.start(); thread2.start(); thread3.start(); }}
Output
Thread Thread-1, is Daemon: falseThread Thread-0, is Daemon: falseThread Thread-2, is Daemon: false
More Example of Java Daemon Thread
Example 1
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.
package com.tutorialspoint;class ThreadDemo extends Thread { ThreadDemo( ) { }
public void run() { System.out.println("Thread " + Thread.currentThread().getName() + ", is Daemon: " + Thread.currentThread().isDaemon()); } public void start () { super.start(); }}public class TestThread { public 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(); }}
Output
Thread Thread-1, is Daemon: falseThread Thread-2, is Daemon: trueThread Thread-0, is Daemon: false
Example 2
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.
package com.tutorialspoint;class ThreadDemo extends Thread { ThreadDemo( ) { } public void run() { System.out.println("Thread " + Thread.currentThread().getName() + ", is Daemon: " + Thread.currentThread().isDaemon()); } public void start () { super.start(); }}public class TestThread { public 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
Exception in thread "main" Thread Thread-1, is Daemon: falseThread Thread-2, is Daemon: falseThread Thread-0, is Daemon: falsejava.lang.IllegalThreadStateException at java.lang.Thread.setDaemon(Unknown Source) at com.tutorialspoint.TestThread.main(TestThread.java:27)