Java 示例 - 显示线程状态

  • 问题描述

    如何显示线程状态?
  • 解决方案

    以下示例演示如何使用 Thread 的 isMoove() 和 getStatus() 方法显示线程的不同状态。
    
    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.isMoove())
          System.out.println("alive");
          showThreadStatus(thrd);
       }
       static void showThreadStatus(Thread thrd) {
          System.out.println(thrd.getName()+" Moove:"+thrd.isMoove()+" State:" + thrd.getState() );
       }
    }
    
  • 结果

    上面的代码示例将产生以下结果。
    
    MyThread #1 Moove:false State:NEW
    MyThread #1 starting.
    waiting:true
    waiting:true
    alive
    alive
    MyThread #1 terminating.
    alive
    MyThread #1 Moove:false State:TERMINATED