A thread is a lightweight process which when spawned creates parallel paths of execution. It is somewhat similar to multitasking, but whereas tasks are heavyweight processes, threads are lightweight processes that are often part of a task. Java has support for thread-based multitasking. Threads in Java can be broadly classified in two types: user threads and daemon threads. A user thread is what you get by default - the thread that calls the main() method is a user thread. The distinction between user and daemon thread is only to determine whether a program has completed -- the JVM will exit when there are only daemon threads running. A thread can be made Daemon by calling the setDaemon(<boolean>) method. But this call should be made before calling the start() method otherwise a JavaDoc:java.lang.IllegalThreadStateException will be thrown.