Thursday, September 12, 2013

Thread : 01 Basic


Thread : 01 Basic

Multitasking -

Multitasking is a process of executing multiple tasks simultaneously.
Use multitasking to utilize the CPU.

Multitasking has two types.
      1. process based multitasking
      2. thread based multitasking

Process based multitasking ( multiprocessing )
* each process has it is own address space in memory
* each process allocates separate memory area.
* heavy weight
* Cost of communication between process is high

Thread based multitasking ( multi-threading )
* Threads share the same address space
* light weight
* Cost of communication between threads is low

Thread : is a light weight sub process. A smallest unit of processing.

Note: There can be multiple processes inside the OS, and a process can have 1 or more threads.

Life cycle of threads
  1. New : Create an instance of thread class
  2. Runnable : after invocation of start() method.
  3. Non-runnable ( blocked ) : thread is live, but not eligible to run.
  4. Terminated : thread is dead after run exit() rmethod.
New → [ start() ] → Runnable
Runnable → [ sleep, wait, wait for lock, block on I/O, suspend ] → Non-runnable
Non-runnable → [ sleep done, notify, lock available, I/O complete, resume ] → Runnable
Runnable → [ exit run() ] → Terminated


Create a thread
  1. by extending Thread class
  2. by implementing runnable interface
Thread class :
Thread()
Thread(String name)
Thread(Runnable r)
Thread(Runnable r, String name)

Runnable Interface
public void run() : is used to perform action for a thread

Starting a Thread
start() method of the thread class is used to start newly created thread.
* a new thread starts
* threads moves from new state to runnable state
* when a thread get a chance to execute, it target run() method will execute

Thread Scheduler
* Thread scheduler is a part of the JVM and it decides which thread should runs.
* There is no guarantee which runnable thread should get execute
* Only one thread at a time will run in a single process

To schedule a thread :
1. preemptive scheduling – highest priority task execute until it enters wait or dead state or very high priority task comes into existence.

2. Time slicing – tasks execute predefined slice of time and then reenters to the pool.

Sleeping a Thread
sleep() method used to sleep a thread.

public class ThreadSample extends Thread {

      public void run(){
           System.out.println("thread is running.cx.." + Thread.currentThread().getName());
           for(int i=0; i<5; i++){
                try{
                    Thread.sleep(500);
                }catch (InterruptedException e) {
                    System.out.println(e);
                }
                System.out.println(i);
           }
      }

     /**
     * @param args
     */
    public static void main(String[] args) {

          ThreadSample thread1 = new ThreadSample();
          ThreadSample thread2 = new ThreadSample();
          ThreadSample thread3 = new ThreadSample();

          thread1.start();
          try{            
             thread1.join(3000);
          }catch (Exception e) {} 

          thread2.start();
          thread3.start();
     }
}

Can we start a thread twice ?
No. After starting a thread, it can never been start again.

join() method waits for a thread to die.