How to display thread status in Java



Problem Description

How to display thread status?

Solution

Following example demonstrates how to display different status of thread using isAlive() & getStatus() methods of Thread.

class MyThread extends Thread {
   boolean waiting = true;
   boolean ready = false;
   MyThread() {
   }
   public void run() {
      String thrdName = Thread.currentThread().getName();
      System.out.println(thrdName + " starting.");
      
      while(waiting) System.out.println("waiting:"+waiting);
      System.out.println("waiting...");
      startWait();
      try {
         Thread.sleep(1000);
      } catch(Exception exc) {
         System.out.println(thrdName + " interrupted.");
      }
      System.out.println(thrdName + " terminating.");
   }
   synchronized void startWait() {
      try {
         while(!ready) wait();
      } catch(InterruptedException exc) {
         System.out.println("wait() interrupted");
      }
   }
   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()+" Alive:"+thrd.isAlive()+" State:" + thrd.getState() );
   }
}

Result

The above code sample will produce the following result.

MyThread #1 Alive:false State:NEW
MyThread #1 starting.
waiting:true
waiting:true
alive
alive
MyThread #1 terminating.
alive
MyThread #1 Alive:false State:TERMINATED
java_threading.htm
Advertisements