A
daemon, in a broad sense, is a background process. In Java, daemon threads serve a similar purpose: they are threads for background tasks that support the main threads. Non-daemon threads are called user threads.
A thread is created as a daemon if its parent is a daemon. The
isDaemon property of a Java thread can be toggled at any time
before the thread starts.
Compared to user threads, daemon threads have a lower execution priority.
When all
user threads have finished, the JVM terminates. Since daemon threads do not perform standalone tasks, they do not prevent the JVM from stopping, and the program ends without waiting for them to complete.
Daemon threads can be useful for tasks such as cache invalidation, periodic updates of values from external sources, or releasing unused user resources.