This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Check out the JavaDocs for the Thread class, there are methods that will report whether a thread is a Deamon thread or not (user thread). You may also set whether a thread is a daemon thread or not -- and you can do this at anytime.
In terms of thread behavior, there is no real difference between between a user thread and daemon thread. It is more of a JVM behavior. Think of it like this: Daemon threads are for the purpose of serving user threads, so if there are no user threads running in the JVM, the JVM will exit, even if there are still Daemon threads running.
This is what I said on the other post on the closed version of this thread.
Yes, there are two kinds of thread. Look through the Thread class in the API, and use ctrl-F then daemon.
A non-daemon thread (user thread) keeps running. If there are any non-daemon threads, the JVM keeps running too, until the last non-daemon thread "dies" (or finishes).
A daemon thread does not keep on running if all the non-daemon threads finish. So if you only have daemon threads still running, then the JVM will not keep running, and the daemon threads stop.
More poetically, from C Horstmann, G Cornell, Core Java 2 7/e vol II Advanced Features, Santa Clara: Sun Microsystems Press (Prentice-Hall) (2005) page 19:- [start quote]
You can turn a thread into a daemon thread by calling
There is nothing demonic about such a thread. A daemon is simply a thread that has no other role in life than to serve others. Examples are timer threads that send regular "timer ticks" to other threads. When only daemon threads remain, the virtual machine exits. There is no point in keeping the program running if all remaining threads are daemons.[end quote]