Step
2 of 3: Implementation
In Java, threads can be customized by the programmer in two
ways.
- Extending the Thread class for Java API and overriding
the run() :
The Thread Class has a run method which does nothing and
has to be overridden by the programmer for performing
their actions.
- Implementing the Runnable interface :
The second method is to implement the interface "Runnable"
:
The Runnable object provides the run() method, which the
programmer can implement for their actions.
The choice between these two method are simply based on the
restriction of Multiple Inheritance in Java.
- If your Class
which is to implement the Threads run() method has
to inherit from some other class (like the Applet
class or any other), then the second method is suitable,
as Java does not allow multiple inheritance.
- Else use the first method of sub-classing the
Thread Class.
The Start() method:
The start() method does the following
- provides the necessary System resources to run the
thread,
- Scheduling the threads to run ,
- and Calling the run() method. Once the thread's start
method is executed the thread is in the Runnable mode.
Priority among threads :
- The 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".
- In Java, threads have priority ranging from MIN_PRIORITY
to MAX_PRIORITY, which are constants defined in the Thread
class. Also the priorities can be set using the setPriority()
method in the Thread class. At any given time, when
multiple threads are ready to be executed, the thread
with the highest priority is chosen for execution.
- It is important to note that Java by itself does not do Time-slicing, i.e. it will not preempt the current running
thread for another thread of same priority. However at
system level, it may implement the time-slicing for Java
threads, depending upon the various systems. It is not
good practice to write code, which depends on system
implementation of time-slicing.
- Finally, a thread can give the green-light, to another thread
to execute using the yield() method.
However, the thread
to which the given thread yields, should be of same
priority, otherwise it will be ignored.
Stopping or Thread death :
A thread arranges its own death by the use of some terminating
condition, like end of iteration, match of some waiting
condition etc. The Thread class provides the isAlive()
method, which returns true, if the thread has been started
and is not stopped, and returns false, if the thread is just a
new Thread or is dead.
-If true, then it cannot be differentiated
between the Runnable and Not Runnable state.
-Similarly,
when false is returned, it is difficult to differentiate
between a new or dead thread.
|