1. 程式人生 > >java多執行緒交替列印奇數偶數 別人的程式碼

java多執行緒交替列印奇數偶數 別人的程式碼

1. 要列印的資源

複製程式碼

 1 package com.mytest.thread;
 2 
 3 /**
 4  * 要列印的資源
 5  * 
 6  */
 7 public class Num {
 8     int i = 1;
 9     // 兩個執行緒看, 交替執行的一個標誌
10     boolean flag = false;
11 }

複製程式碼

2. 列印奇數的執行緒

複製程式碼

 1 package com.mytest.thread;
 2 
 3 public class PrintOdd implements Runnable {
 4     Num num;
 5 
 6     public PrintOdd(Num num) {
 7         this.num = num;
 8 
 9     }
10 
11     public void run() {
12         while (num.i <= 100) {
13             synchronized (num) {
14                 if (num.flag) {
15                     try {
16                         num.wait();
17                     } catch (Exception e) {
18                         System.out.println(e.getMessage());
19                     }
20 
21                 } else {
22                     System.out.println("奇數----" + num.i);
23                     num.i++;
24                     num.flag = true;
25                     num.notify();
26                 }
27 
28             }
29         }
30     }
31 }

複製程式碼

3. 列印偶數的執行緒

複製程式碼

 1 package com.mytest.thread;
 2 
 3 public class PrintEven implements Runnable {
 4 
 5     Num num;
 6 
 7     public PrintEven(Num num) {
 8         this.num = num;
 9 
10     }
11 
12     public void run() {
13         while (num.i <= 100) {
14             synchronized (num) {// 必須要用同意吧鎖物件,這個物件是num
15                 if (!num.flag) {
16                     try {
17                         num.wait();// wait()函式必須和鎖死同一個
18                     } catch (Exception e) {
19                         System.out.println(e.getMessage());
20                     }
21 
22                 } else {
23                     System.out.println("偶數----" + num.i);
24                     num.i++;
25                     num.flag = false;
26                     num.notify();
27                 }
28 
29             }
30         }
31     }
32 
33 }

複製程式碼

4. 主函式

複製程式碼

 1 package com.mytest.thread;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5 
 6         Num num = new Num();
 7 
 8         PrintOdd printOdd = new PrintOdd(num);
 9         PrintEven printEven = new PrintEven(num);
10 
11         Thread thread1 = new Thread(printOdd);
12         Thread thread2 = new Thread(printEven);
13 
14         thread1.start();
15         thread2.start();
16     }
17 }

複製程式碼

5. 執行結果

♥作者:明志健致遠  ♠出處:http://www.cnblogs.com/study-everyday/  ♦本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。  ♣本部落格大多為學習筆記或讀書筆記,本文如對您有幫助,還請多推薦下此文,如有錯誤歡迎指正,相互學習,共同進步。