Java多線程多個線程wait(),一個notify()喚醒,喚醒的順序


 1 package thread;
 2 
 3 public class ThreadWN implements Runnable {
 4     public String name;
 5     public String getName() {
 6         return name;
 7     }
 8     static int a = 9;
 9     public ThreadWN(String name) {
10         this.name = name;
11     }
12     @Override
13     public void run() {
14         while (a > 0) {
15             synchronized (ThreadWN.class) {
16                 a--;
17                 System.out.println("當前執行"+this.name+",並進入等待中......." );
18                 try {
19                     ThreadWN.class.wait();
20                 } catch (InterruptedException e) {
21                     e.printStackTrace();
22                 }
23             }
24         }
25     }
26 
27     public static void main(String[] args) throws InterruptedException {
28         TestTH tth =new TestTH("喚醒");
29         Thread t =new Thread(tth);
30         ThreadWN wna = new ThreadWN("A");
31         ThreadWN wnb = new ThreadWN("B");
32         ThreadWN wnc = new ThreadWN("C");
33         ThreadWN wnd = new ThreadWN("D");
34         ThreadWN wne = new ThreadWN("E");
35         ThreadWN wnf = new ThreadWN("F");
36         Thread tha = new Thread(wna);
37         Thread thb = new Thread(wnb);
38         Thread thc = new Thread(wnc);
39         Thread thd = new Thread(wnd);
40         Thread the = new Thread(wne);
41         Thread thf = new Thread(wnf);
42 
43         tha.start();
44         Thread.sleep(10);
45         thb.start();
46         Thread.sleep(10);
47         thc.start();
48         Thread.sleep(10);
49         thd.start();
50         Thread.sleep(10);
51         the.start();
52         Thread.sleep(10);
53         thf.start();
54         Thread.sleep(10);
55         t.start();
56         
57     }
58     
59 }
60 class TestTH implements Runnable{
61 
62     private String name;
63 
64     public TestTH(String name) {
65         this.name=name;
66     }
67     public String getName() {
68         return name;
69     }
70     @Override
71     public void run() {
72         for (int i = 0; i < 6; i++) {
73             synchronized (ThreadWN.class) {
74                 try {
75                     Thread.sleep(1000);
76                 } catch (InterruptedException e) {
77                     // TODO 自動生成的 catch 塊
78                     e.printStackTrace();
79                 }
80                 System.out.println(this.getName()+"進程:"+"喚醒了一個線程!!!");
81                 ThreadWN.class.notify();
82                 }
83             }
84         }
85 
86     
87 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM