Daemon thread is defined as a service provider thread which provides services to the user thread. Its life depends on the user threads i.e. when all the user threads dies, JVM terminates this thread by regulation. An example for a daemon thread would be the garbage collection.
When all non-daemon threads finish, the JVM tends to halt, and any remaining daemon threads are abandoned, finally blocks are not executed. Due to this reason they must be used carefully. setDaemon(boolean) method can be used to change the Thread daemon properties before the thread starts which can be very useful.