<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

    復(fù)習(xí)多線程,一個(gè)經(jīng)典的實(shí)例:生產(chǎn)者消費(fèi)者問題:

    1.number表示產(chǎn)品編號,flag表示現(xiàn)在應(yīng)該由誰來操作.

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

    3.兩個(gè)線程類Producer和Consumer分別代表生產(chǎn)者與消費(fèi)者

    Java代碼
    1. package cn.luxsoft.javafirststep.Thread;  
    2.   
    3. class ProductData {  
    4.   
    5.     // 產(chǎn)品編號  
    6.     private int number;  
    7.   
    8.     // 標(biāo)記位  
    9.     private boolean flag = true;  
    10.   
    11.     public synchronized void setNumber(int number) {  
    12.         if (!flag) {  
    13.             try {  
    14.                 // 末消費(fèi)等待  
    15.                 wait();  
    16.             } catch (InterruptedException e) {  
    17.                 e.printStackTrace();  
    18.             }  
    19.         }  
    20.         this.number = number;  
    21.   
    22.         // 標(biāo)記已經(jīng)產(chǎn)生  
    23.         flag = false;  
    24.   
    25.         // 通知消費(fèi)者已經(jīng)生產(chǎn),可以消費(fèi)  
    26.         notify();  
    27.     }  
    28.   
    29.     public synchronized int getNumber() {  
    30.         if (flag) {  
    31.             try {  
    32.                 // 未生產(chǎn)等待  
    33.                 wait();  
    34.             } catch (InterruptedException e) {  
    35.                 e.printStackTrace();  
    36.             }  
    37.         }  
    38.   
    39.         // 標(biāo)記已消費(fèi)  
    40.         flag = true;  
    41.   
    42.         // 通知需要生產(chǎn)  
    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 + "]生產(chǎn).");  
    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 + "]消費(fè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
    主站蜘蛛池模板: 亚洲A∨无码无在线观看| 麻豆狠色伊人亚洲综合网站| 午夜影院免费观看| 亚洲成电影在线观看青青| 永久免费无码网站在线观看| 有色视频在线观看免费高清在线直播| 国产精品亚洲成在人线| 久久国内免费视频| 永久免费观看黄网站| 亚洲欧洲国产成人精品| 亚洲av无码专区在线观看素人| 日韩精品无码专区免费播放| 精品久久久久亚洲| 亚洲激情在线视频| 免费少妇a级毛片| 国产精品视频免费观看| 九九九精品视频免费| 亚洲图片中文字幕| 国产亚洲成人在线播放va| 免费在线看v网址| 一级特黄录像免费播放肥| 男人天堂2018亚洲男人天堂| 亚洲精品无码高潮喷水在线| 成人在线免费观看| 亚洲网站在线免费观看| 九九热久久免费视频| 亚洲国产午夜精品理论片在线播放 | 亚洲sm另类一区二区三区| 久久精品国产精品亚洲| 青娱分类视频精品免费2| 久久久久久毛片免费看| 精品亚洲AV无码一区二区三区| 久久99亚洲综合精品首页| 免费做爰猛烈吃奶摸视频在线观看| 国产精品免费视频观看拍拍| 久久精品国产亚洲AV久| 国产成人精品日本亚洲网站| 日日麻批免费40分钟日本的| 一级毛片在播放免费| 亚洲国产av一区二区三区丶| 激情综合色五月丁香六月亚洲|