Daemon threads in Java are like a service providers for other threads or objects running in the same
process as the daemon thread.
Example of
daemon thread is the garbage collection.
Daemon threads are used for background supporting tasks and are
only needed while normal threads are executing. If normal threads are not
running and remaining threads are daemon threads then the interpreter exits.
A daemon thread is a thread that does not
prevent the JVM from exiting when the program finishes but the thread is still
running.
setDaemon(true/false): This method is
used to specify that a thread is daemon thread.
public boolean isDaemon(): This method is used to determine the thread is daemon
thread or not.
class WorkerThread extends Thread
{
public WorkerThread()
{
setDaemon(true);
/**When false (user thread) the Worker thread continues to run.
* When true (daemon thread) the Worker thread terminates
* when the main thread terminates.
**/
}
public void run() {
int count=0 ;
while (true) {
System.out.println("Hello from Worker "+count++) ;
try {
sleep(5000);
} catch (InterruptedException e) {}
}
}
}
public class DaemonTest {
public static void main(String[] args) {
new WorkerThread().start();
try {
Thread.sleep(7500);
} catch (InterruptedException e) {
System.out.println("Interrupted Exception");
}
System.out.println("Main Thread ending") ;
}
}
Output:
Hello from
Worker 0
Hello from
Worker 1
Main Thread
ending
Points to remember:
Default nature of a thread is non daemon because Thread inherits
its daemon nature from the Thread which creates it i.e. parent Thread and since
main thread (Thread class) is a
non-daemon thread.
A thread will remain non-daemon until explicitly made daemon by
calling setDaemon(true).
Thread should setDaemon before start it otherwise It will throw IllegalThreadStateException
if corresponding Thread is already started and
running.
Difference between
Daemon and Non Daemon:
JVM doesn’t wait for any daemon thread to finish before
existing.
Daemon Threads are treated differently than User Thread when JVM
terminates, finally blocks are not
called, Stacks are not unwounded and JVM just exits.
No comments:
Post a Comment