Thread Execution
Threads are implemented by a scheduler in Java, which asks the local operating system to run threads in the "runnable" state.
Typically, the OS runs each thread in turn for a "time slice". However, some operating systems (early versions of Solaris, e.g.) run a thread to completion unless another thread of higher priority preempts the running thread.
Java threads are based on a locking mechanism using monitors for synchronization, introduced by Hoare in 1974.