
Home
|


JAVA PROGRAMMING
Understanding Thread Priority
Previously, this lesson claimed that threads run
concurrently. While conceptually this is true, in practice it usually
isn't. Most computer configurations have a single CPU, so threads actually
run one at a time in such a way as to provide an illusion of concurrency.
Execution of multiple threads on a single CPU, in some order, is called
scheduling. The Java runtime supports a very simple, deterministic
scheduling algorithm known as fixed priority scheduling. This algorithm
schedules threads based on their priority relative to other runnable
threads.
When a Java thread is created, it inherits its priority from the thread
that created it. You can also modify a thread's priority at any time after
its creation using the setPriority method. Thread priorities are
integers ranging between MIN_PRIORITY and MAX_PRIORITY
(constants defined in the Thread class). The higher the integer, the
higher the priority. At any given time, when multiple threads are ready to
be executed, the runtime system chooses the runnable thread with
the highest priority for execution. Only when that thread stops, yields,
or becomes not runnable for some reason will a lower priority
thread start executing. If two threads of the same priority are waiting
for the CPU, the scheduler chooses one of them to run in a round-robin
fashion. The chosen thread will run until one of the following conditions
is true:
- A higher priority thread becomes runnable.
- It yields, or its run method exits.
- On systems that support time-slicing, its time
allotment has expired.
Then the second thread is given a chance to run, and
so on, until the interpreter exits.
The Java runtime system's thread scheduling
algorithm is also preemptive. If at any time a thread with a higher
priority than all other runnable threads becomes runnable,
the runtime system chooses the new higher priority thread for execution.
The new higher priority thread is said to preempt the other threads.
Here is an example to show thread priorities:

|
 |