以下实例演示了如何通过继承 Thread 类并使用 currentThread.getName() 方法来监测线程的状态:
Main.java 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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()); } } |
以上代码运行输出结果为: