A thread is a separate flow of execution. Several threads can be run concurrently, at the same time. Theoretically this is possible with multi-cpu machines but the usual context is that a machine has only one CPU. In that case, each thread gets a piece of CPU time allotted and is then preempted to make room for another thread. Threads can be assigned priorities in which case a thread with a high priority will be given more CPU time than a lower-priority thread. Check out the excellent book on Java threads by Doug Lea: Concurrent Programming in Java , Second Edition: Design Principles and Patterns (The Java Series)