以下实例演示了如何通过继承 Thread 类并使用 currentThread.getName() 方法来监测线程的状态:/*
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 + ' 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());
}}
以上代码运行输出结果为:
……alive
aliveMyThread #1 terminating.alive……
联系客服