Programming Pandit

c/c++/c#/Javav/Python


Latest Update

Wednesday, April 2, 2025

Thread Life Cycle in Java

Thread Life Cycle in Java

 

In Java, a thread goes through various stages in its life cycle. These stages define the different states a thread can be in at any given time. The life cycle of a thread consists of the following five states:

 


1. New (Created) State

  • When a thread object is created using the Thread class but has not yet started, it is in the New state.
  • It remains in this state until the start() method is called.

Example:

 

Thread t = new Thread(); // Thread is in NEW state

 


2. Runnable State

  • When the start() method is called, the thread moves from the New state to the Runnable state.
  • The thread is ready for execution but is waiting for CPU time to be assigned by the scheduler.

Example:

 

t.start(); // Thread is in RUNNABLE state

 


3. Running State

  • When the thread scheduler assigns CPU time, the thread enters the Running state and starts execution.
  • This is where the run() method executes.

Example:

 

public void run() {

    System.out.println("Thread is running");

}

 


4. Blocked/Waiting State (Suspended State)

  • A thread moves to a blocked or waiting state if it needs to wait for another thread to release resources or a signal.
  • A thread can enter this state using:
    • wait(): The thread waits indefinitely until notified.
    • sleep(time): The thread sleeps for a specific time.
    • join(): The thread waits for another thread to complete.

Example:

 

try {

    Thread.sleep(1000); // Thread enters TIMED_WAITING state

} catch (InterruptedException e) {

    e.printStackTrace();

}

 


5. Terminated (Dead) State

  • When the run() method finishes execution or if the thread is stopped forcefully, it moves to the Terminated state.
  • A terminated thread cannot be restarted.

Example:

 

System.out.println("Thread execution completed"); // Thread enters TERMINATED state


Thread Life Cycle Diagram:

 

       NEW

        ↓

   Runnable  ←── Blocked/Waiting

        ↓

    Running

        ↓

   Terminated

 

 

Program :

 

class MyThread extends Thread {

    public void run() {

        System.out.println(Thread.currentThread().getName() + " is in RUNNING state.");

        

        try {

            Thread.sleep(2000); // Moves to TIMED_WAITING state

            System.out.println(Thread.currentThread().getName() + " is back to RUNNING state.");

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        

        System.out.println(Thread.currentThread().getName() + " has completed execution (TERMINATED).");

    }

}

 

public class ThreadLifeCycleDemo {

    public static void main(String[] args) {

        MyThread t1 = new MyThread(); // Thread is in NEW state

        System.out.println("Thread state after creation: " + t1.getState());

 

        t1.start(); // Moves to RUNNABLE state

        System.out.println("Thread state after calling start(): " + t1.getState());

 

        try {

            Thread.sleep(500); // Ensures main thread waits for some time

            System.out.println("Thread state while it is sleeping: " + t1.getState());

            

            t1.join(); // Ensures main thread waits for t1 to complete

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

 

        System.out.println("Thread state after completion: " + t1.getState());

    }

}

 

Output:

 



No comments:

Post a Comment