Latest web development tutorials

Java Examples - Get thread state

Java Examples Java Examples

Java threads in the life cycle can be divided into five states.

  • 1. Create a new state (New): creates a new thread object.
  • 2. ready state (Runnable): After the thread object is created, the other thread calls the start () method of the object. The state of the thread runnable threads in the pool is located, has become runnable, waiting to acquire the right to use the CPU.
  • 3. Run Status (Running): ready state thread gets a CPU, executing the program code.
  • 4. blocked (Blocked): the thread is blocked for some reason to give up the right to use CPU temporarily stops running. Until the thread into the ready state, a chance to go running. Case blocked three categories:
    • (A), waiting for blocking: execution wait thread run () method, JVM will the thread into the wait pool.
    • (B), synchronous blocking: threads running in obtaining the object of synchronization lock, if the synchronization lock is occupied by another thread, the JVM will lock into the thread pool.
    • (C) Other blocked: running thread execution sleep () or join () method, or issue the I / O request, JVM will set the thread is blocked. When the sleep () timeout, join () waits for a thread terminates or times out, or I / O processing is completed, the thread into the ready state again.
  • 5. death state (Dead): thread execution due to abnormal over or out of the run () method, the thread end of the life cycle.

006

The following example demonstrates how to obtain the state of the thread:

/*
 author by w3cschool.cc
 Main.java
 */

class MyThread extends Thread{
   boolean waiting= true;
   boolean ready= false;
   MyThread() {
   }
   public void run() {
      String thrdName = Thread.currentThread().getName();
      System.out.println(thrdName + " 启动");
      while(waiting)
      System.out.println("等待:"+waiting);
      System.out.println("等待...");
      startWait();
      try {
         Thread.sleep(1000);
      }
      catch(Exception exc) {
         System.out.println(thrdName + " 中断。");
      }
      System.out.println(thrdName + " 结束。");
   }
   synchronized void startWait() {
      try {
         while(!ready) wait();
      }
      catch(InterruptedException exc) {
         System.out.println("wait() 中断。");
      }
   }
   synchronized void notice() {
      ready = true;
      notify();
   }
}
public class Main {
   public static void main(String args[]) 
   throws Exception{
      MyThread thrd = new MyThread();
      thrd.setName("MyThread #1");
      showThreadStatus(thrd);
      thrd.start();
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.waiting = false;
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.notice();
      Thread.sleep(50);
      showThreadStatus(thrd);
      while(thrd.isAlive())
      System.out.println("alive");
      showThreadStatus(thrd);
   }
   static void showThreadStatus(Thread thrd) {
      System.out.println(thrd.getName()+" 存活:" +thrd.isAlive()+" 状态:" + thrd.getState() );
   }
}

The above code is run output is:

……
alive
alive
alive
MyThread #1 结束。
alive
alive
alive
alive
alive
alive
alive
MyThread #1 存活:false 状态:TERMINATED

Java Examples Java Examples