# most operating systems use one of two scheduling methods
1. Preemptive scheduling
2. Time slicing
# In preemptive scheduling the highest priority thread continues to run until it dies, waits, or is preempted by a thread of higher priority
# In time slicing a thread runs for a specific time and then enters the runnable state; at which point the scheduler decides wether to return to the thread or schedule a different thread (method used by Win95/NT)
Ways for a thread to leave running state -
· It can cease to be ready to execute (by calling a blocking i/o method)
· It can get pre-empted by a high-priority thread, which becomes ready to execute.
· It can explicitly call a thread-scheduling method such as wait or suspend.
· Solaris JVM’s are pre-emptive.
· Windows JVM’s were pre-emptive until Java 1.0.2
Time-sliced or Round Robin Scheduling
· A thread is only allowed to execute for a certain amount of time. After that, it has to contend for the CPU (virtual CPU, JVM) time with other threads.
· This prevents a high-priority thread mono-policing the CPU.
· The drawback with this scheduling is - it creates a non-deterministic system - at any point in time, you cannot tell which thread is running and how long it may continue to run.
· Mactinosh JVM’s
· Windows JVM’s after Java 1.0.2