如何通过继承 Thread 类创建一个线程并使用 currentThread.getName() 方法来监测线程的状态
package com.gaodaima; public class ThreadAliveTest extends Thread { boolean waiting = true; boolean ready = false; ThreadAliveTest() { } 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(); } static void showThreadStatus(Thread thrd) { System.out.println(thrd.getName() + "Alive:=" + thrd.isAlive() + " State:=" + thrd.getState()); } public static void main(String[] args) throws InterruptedException { ThreadAliveTest thrd = new ThreadAliveTest(); thrd.setName("ThreadAliveTest线程"); showThreadStatus(thrd); thrd.start(); Thread.sleep(100); showThreadStatus(thrd); thrd.waiting = false; Thread.sleep(100); showThreadStatus(thrd); thrd.notice(); Thread.sleep(100); showThreadStatus(thrd); while (thrd.isAlive()) System.out.println("alive"); showThreadStatus(thrd); } }
运行结果:
ThreadAliveTest线程Alive:=false State:=NEW ThreadAliveTest线程 starting. waiting:true ... waiting:true ThreadAliveTest线程Alive:=true State:=RUNNABLE waiting:true waiting:true waiting... ThreadAliveTest线程Alive:=true State:=WAITING ThreadAliveTest线程Alive:=true State:=TIMED_WAITING alive ... alive ThreadAliveTest线程 terminating. alive ... alive ThreadAliveTest线程Alive:=false State:=TERMINATED