java多執行緒交替列印奇數偶數 別人的程式碼
阿新 • • 發佈:2018-12-14
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/ ♦本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 ♣本部落格大多為學習筆記或讀書筆記,本文如對您有幫助,還請多推薦下此文,如有錯誤歡迎指正,相互學習,共同進步。