實例如下:
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
57
58
59
60
61
62
63
64
65
|
import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.Executors; /** * 測試監控類 * * @author * */ public class WatchThread { /** * 測試函數 * * @throws InterruptedException */ public void testThread() throws InterruptedException { int threadNum = 10 ; // 初始化countDown CountDownLatch threadSignal = new CountDownLatch(threadNum); // 創建固定長度的線程池 Executor executor = Executors.newFixedThreadPool(threadNum); for ( int i = 0 ; i < threadNum; i++) { // 開threadNum個線程 Runnable task = new TestThread(threadSignal); // 執行 executor.execute(task); } threadSignal.await(); // 等待所有子線程執行完 // do work System.out.println(Thread.currentThread().getName() + "+++++++結束." ); } /** * 測試函數 */ public static void main(String[] args) throws InterruptedException { WatchThread test = new WatchThread(); test.testThread(); } /** * * @author jill * */ private class TestThread implements Runnable { private CountDownLatch threadsSignal; public TestThread(CountDownLatch threadsSignal) { this .threadsSignal = threadsSignal; } public void run() { System.out.println(Thread.currentThread().getName() + "開始..." ); // do shomething System.out.println( "開始了線程::::" + threadsSignal.getCount()); // 線程結束時計數器減1 threadsSignal.countDown(); //這句代碼 建議放在 finally里執行 System.out.println(Thread.currentThread().getName() + "結束. 還有" + threadsSignal.getCount() + " 個線程" ); } } } |
以上這篇Java實現監控多個線程狀態的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。