Un programa Java puede ejecutarse en uno o más hilos (threads) para realizar tareas simultáneamente. Los programas que usan threads pueden dividir el trabajo en dos o más tareas independientes que se ejecutan en paralelo, mientras que los programas de un solo thread deben esperar a que una tarea termine antes de comenzar la siguiente. Los métodos start, run, sleep, wait, notify y notifyAll controlan el ciclo de vida y la sincronización de los threads.