
1. When a java process initialize a new thread, its in the New state.
2. After the program calls the start method of the thread, the thread state transition to the Runnable state
3. When the thread scheduler selects this thread for execution, the thread state is changed to RUNNING state in which the java virtual machine invokes the Thread run hook method
4. If there is any wait operation called from the thread (sleep, wait or join method), the thread state transition to Timed Waiting state
5. When this waiting time elapses, the thread is back to RUNNABLE state and is eligible for the Thread scheduler selection .
6. After the thread start executing its run method, it may access a guarded resources like a synchronized method or a state protected by a monitor lock which will transition the thread to BLOCKED state if the resource is not yet available
7. Once the resource is available, the thread can access the guarded resource and will transition to RUNNABLE state
8. Once the thread start running again, it might wait for a monitor condition like wait() method changing the thread state to WAITING state.
9. When the other threads notifies the wait condition with notify or notifyAll method, the thread again becomes RUNNABLE
10. Finally, when a RUNNING thread completes its execution, it gets TERMINATED.



