Java Thread Life Cycle and Thread States

A java thread can be in any of following thread states during it’s life cycle i.e. New, Runnable, Blocked, Waiting, Timed Waiting or Terminated. These are also called life cycle events of a thread in java. Let’s understand each state in more detail.

Java Thread Life Cycle States

Java Thread Life Cycle States

  1. New

    As soon as, you create new thread, it’s in NEW state. It remains in this state until the program starts the thread using it’s start() method.

    At this point, thread is not alive and it’s a state internal to Java programming.

  2. Runnable

    Calling start() method on thread put it in RUNNABLE state. At this point, execution control is passed to thread scheduler to finish it’s execution. Thread scheduler decide from this point that this thread should be executed (also known as dispatching the thread) or should be put on hold to give chance to other runnable threads.

    Thread scheduling is platform dependent — the behavior of a multi-threaded program could vary across different Java implementations.

    In most operating systems, each thread is given a small amount of processor time—called a quantum or timeslice—with which to perform its task. A task utilizing it’s quantum is said to be in RUNNING state. When its quantum expires, the thread returns to the RUNNABLE state, and the operating system assigns another thread to the processor.

    The process that an operating system uses to determine which thread to dispatch is called thread scheduling and is dependent on thread priorities.

    The operating system hide the RUNNABLE and RUNNING states from the Java Virtual Machine (JVM), which sees only the RUNNABLE state.

    RUNNABLE VS RUNNING

  3. Blocked

    A RUNNABLE thread transitions to the BLOCKED state when it attempts to perform a task that cannot be completed immediately and it must temporarily wait until that task completes.

    For example, when a thread issues an input/output request, the operating system blocks the thread from executing until that I/O request completes—at that point, the blocked thread transitions to the RUNNABLE state, so it can resume execution. A blocked thread cannot use a processor, even if one is available.

  4. Waiting

    A thread can be put in waiting state for various reasons e.g. calling it’s wait() method. Usually program put a thread in WAIT state because something else needs to be done prior to what current thread is doing.

    Read More: Working With wait(), notify() and notifyAll() in Java?

    Once the thread wait state is over or it is, it’s state is changed to RUNNABLE and it’s moved back to thread pool.

  5. Timed Waiting

    A RUNNABLE thread can transition to the TIMED WAITING state if it provides an optional wait interval when it’s waiting for another thread to perform a task. You can put a java thread in TIMED WAITING state by calling it’s sleep(long millis) method or wait(long millis) method.

    Such a thread returns to the RUNNABLE state when it’s notified by another thread or when the timed interval expires—whichever comes first.

    Timed waiting threads and waiting threads cannot use a processor, even if one is available.

  6. Terminated

    A thread enters the TERMINATED state (sometimes called the dead state) when it successfully completes its task or otherwise terminated due to any error or even it was forcefully killed.

Please remember that though JVM and OS thread scheduler do their best yet sometimes threads can cause starvation or deadlock. This occurs when a waiting thread (let’s call this thread1) cannot proceed because it’s waiting (either directly or indirectly) for another thread (let’s call this thread2) to proceed, while simultaneously thread2 cannot proceed because it’s waiting (either directly or indirectly) for thread1 to proceed.

Happy Learning !!

Reference(s) :

Java Thread States

Was this post helpful?

Join 7000+ Fellow Programmers

Subscribe to get new post notifications, industry updates, best practices, and much more. Directly into your inbox, for free.

6 thoughts on “Java Thread Life Cycle and Thread States”

  1. The operating system hide the RUNNABLE and RUNNING states from the Java Virtual Machine (JVM), which sees only the RUNNABLE state. — could not understand this part.

    Reply
  2. I am finding related to thread lifecycle of java concept I found your article which has detailed information with the excellent diagram. Across your article, I got the complete knowledge of thread life cycle of java. Just after reading your article i came to know that terminated concept of thread lifecycle. Thanks for giving such a wonderful article..

    Reply
    • As I have highlighted in blue information box: “The operating system hide the RUNNABLE and RUNNING states from the Java Virtual Machine (JVM), which sees only the RUNNABLE state.”

      Reply

Leave a Comment

HowToDoInJava

A blog about Java and its related technologies, the best practices, algorithms, interview questions, scripting languages, and Python.