1. Pre-emptive Scheduling.
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
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