So, If understand it correctly , a daemon threda has to be explicityly set by the developer. On it's own none of threads sstarted by the system are daemon threads? If one daemon thread creates another thread then that will also be a daemon thread.
watch for the following from Thread API
Every thread has a priority. Threads with higher priority are executed in preference to threads with lower priority. Each thread may or may not also be marked as a daemon. When code running in some thread creates a new Thread object, the new thread has its priority initially set equal to the priority of the creating thread, and is a daemon thread if and only if the creating thread is a daemon.
------------------
Every time a thread dies,The JVM looks at the remaining threads to see whether any of them is a user thread.If only daemon threads are left,the JVM terminates. You are right. So there is no guarantee that the Daemon thread will get a chance to run. The life of Daemon depends on the user thread of the program.
Ambapali