A user thread is a thread that is created by the application (user), and, in most cases, a daemon thread is created by the Java VM to serve the user threads. The VM differentiates between threads, being user or daemon, when a user thread exits. In the event that a user thread exits the VM will check to find out if there are any other user threads running. If there are it will schedule the next thread (user or daemon). If there are no other user threads running, and only daemon threads, that instance of the VM will also exit.
The difference between these two types of threads is straightforward: If the Java runtime determines that the only threads running in an application are daemon threads (i.e., there are no user threads in existence) the Java runtime promptly closes down the application, effectively stopping all daemon threads dead in their tracks. In order for an application to continue running, it must always have at least one live user thread. In all other respects the Java runtime treats daemon threads and user threads in exactly the same manner.