<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,comments - 41,trackbacks - 0

    復習多線程,一個經典的實例:生產者消費者問題:

    1.number表示產品編號,flag表示現在應該由誰來操作.

    2.ProcuctData類中有兩個同步方法setNumber()和getNumber(),分別代表生產者生產產品和消費者消費 產品。

    3.兩個線程類Producer和Consumer分別代表生產者與消費者

    Java代碼
    1. package cn.luxsoft.javafirststep.Thread;  
    2.   
    3. class ProductData {  
    4.   
    5.     // 產品編號  
    6.     private int number;  
    7.   
    8.     // 標記位  
    9.     private boolean flag = true;  
    10.   
    11.     public synchronized void setNumber(int number) {  
    12.         if (!flag) {  
    13.             try {  
    14.                 // 末消費等待  
    15.                 wait();  
    16.             } catch (InterruptedException e) {  
    17.                 e.printStackTrace();  
    18.             }  
    19.         }  
    20.         this.number = number;  
    21.   
    22.         // 標記已經產生  
    23.         flag = false;  
    24.   
    25.         // 通知消費者已經生產,可以消費  
    26.         notify();  
    27.     }  
    28.   
    29.     public synchronized int getNumber() {  
    30.         if (flag) {  
    31.             try {  
    32.                 // 未生產等待  
    33.                 wait();  
    34.             } catch (InterruptedException e) {  
    35.                 e.printStackTrace();  
    36.             }  
    37.         }  
    38.   
    39.         // 標記已消費  
    40.         flag = true;  
    41.   
    42.         // 通知需要生產  
    43.         notify();  
    44.         return this.number;  
    45.     }  
    46. }  
    47.   
    48. class Procucer extends Thread {  
    49.     private ProductData s;  
    50.   
    51.     Procucer(ProductData s) {  
    52.         this.s = s;  
    53.     }  
    54.   
    55.     @Override  
    56.     public void run() {  
    57.         for (int i = 0; i < 10; i++) {  
    58.             s.setNumber(i);  
    59.             System.out.println("P[" + i + "]生產.");  
    60.         }  
    61.     }  
    62. }  
    63.   
    64. class Consumer extends Thread {  
    65.     private ProductData s;  
    66.   
    67.     Consumer(ProductData s) {  
    68.         this.s = s;  
    69.     }  
    70.   
    71.     public void run() {  
    72.         int i;  
    73.   
    74.         do {  
    75.             i = s.getNumber();  
    76.             System.out.println("P[" + i + "]消費.**");  
    77.         } while (i != 9);  
    78.     }  
    79. }  
    80.   
    81. public class ProducerConsumer {  
    82.   
    83.     /** 
    84.      * @param args 
    85.      */  
    86.   
    87.     public static void main(String[] args) {  
    88.   
    89.         ProductData s = new ProductData();  
    90.         Thread producer = new Procucer(s);  
    91.         Thread consumer = new Consumer(s);  
    92.   
    93.         producer.start();  
    94.         consumer.start();  
    95.     }  
    96.   
    97. }  

    文章來源:http://www.my1984.net/?action=show&id=177

    MSN:
    posted on 2009-03-08 17:12 kylixlu 閱讀(790) 評論(0)  編輯  收藏 所屬分類: J2SE
    主站蜘蛛池模板: 天堂亚洲免费视频| 国产人成免费视频网站| 亚洲国产精彩中文乱码AV| 99ee6热久久免费精品6| 亚洲第一区二区快射影院| 亚洲午夜日韩高清一区| 最近高清中文字幕免费| 美女视频黄免费亚洲| 国产性爱在线观看亚洲黄色一级片| 999zyz**站免费毛片| 亚洲精品国产免费| 四虎影视在线永久免费观看| 国产乱子伦精品免费视频| 亚洲AV无码不卡在线播放| 成人免费无码大片a毛片| 男人扒开添女人下部免费视频| 99久久亚洲精品无码毛片| 免费国产a国产片高清网站| 91在线手机精品免费观看| 精品免费AV一区二区三区| 亚洲黄色免费观看| AV在线播放日韩亚洲欧| 国产桃色在线成免费视频| 中国一级全黄的免费观看| 亚洲av无码一区二区三区人妖| 亚洲av永久无码精品网站| 免费国产在线观看老王影院| 1000部免费啪啪十八未年禁止观看| gogo免费在线观看| 亚洲色大网站WWW永久网站| 久久精品国产亚洲AV麻豆~| www国产亚洲精品久久久| 中文字幕影片免费在线观看| 日本人成在线视频免费播放| 免费看美女午夜大片| 亚洲色成人WWW永久在线观看| 亚洲男人第一av网站| 伊人久久精品亚洲午夜| 免费大黄网站在线看| 毛片免费在线播放| 色片在线免费观看|