Difference between revisions of "Threads"

From Suhrid.net Wiki
Jump to navigationJump to search
Line 19: Line 19:
 
* The thread can also go into waiting/blocked/sleeping state. e.g. waiting for an IO Resource such as a packet to arrive. In other words it is NOT ''runnable''.
 
* The thread can also go into waiting/blocked/sleeping state. e.g. waiting for an IO Resource such as a packet to arrive. In other words it is NOT ''runnable''.
 
* Once run() completes the Thread goes to the dead state. You cannot call start() again on it. Of course, the thread object itself can still be used.
 
* Once run() completes the Thread goes to the dead state. You cannot call start() again on it. Of course, the thread object itself can still be used.
 +
 +
<u> '''SLEEP''' </u>
 
*''' Be careful of the Thread classes static methods such as sleep() and yield().''' They refer to the current executing thread! Do not be misled when they are invoked using a thread object.  
 
*''' Be careful of the Thread classes static methods such as sleep() and yield().''' They refer to the current executing thread! Do not be misled when they are invoked using a thread object.  
 
* e.g. t1.sleep() will not cause Thread t1 to sleep(), it causes the current executing thread to sleep().
 
* e.g. t1.sleep() will not cause Thread t1 to sleep(), it causes the current executing thread to sleep().
 +
* sleep() specifies that the Thread must go to sleep for ''at least'' the specified duration.
 +
* What does this mean, it means that when the sleep duration expires and thread wakes up, the thread immediately does not go to running - it goes to the runnable state.
 +
* so sleep() gives the minimum duration that the thread will not run. You cannot use it as an accurate timer!

Revision as of 23:49, 8 June 2011

  • Think of Thread as the "worker" and Runnable as the job.
  • Define work to be done in a class that implements Runnable.
  • Instantiate the thread using the runnable object. (Thread is in the new state)
  • Then start() it. (Thread moves to the runnable state, eligible to run, perhaps waiting for the scheduler to run it)
class Job implements Runnable {
     public void run() {
         //work to be performed in  a separate thread.
     }
}

Job j = new Job();
Thread t = new Thread(j);
t.start();
  • When thread actually runs it is in the running state.
  • The thread can also go into waiting/blocked/sleeping state. e.g. waiting for an IO Resource such as a packet to arrive. In other words it is NOT runnable.
  • Once run() completes the Thread goes to the dead state. You cannot call start() again on it. Of course, the thread object itself can still be used.

SLEEP

  • Be careful of the Thread classes static methods such as sleep() and yield(). They refer to the current executing thread! Do not be misled when they are invoked using a thread object.
  • e.g. t1.sleep() will not cause Thread t1 to sleep(), it causes the current executing thread to sleep().
  • sleep() specifies that the Thread must go to sleep for at least the specified duration.
  • What does this mean, it means that when the sleep duration expires and thread wakes up, the thread immediately does not go to running - it goes to the runnable state.
  • so sleep() gives the minimum duration that the thread will not run. You cannot use it as an accurate timer!