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

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

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

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
    問題描述:一個倉庫可以存放N件物品。生產者每生產一件產品,將產品放入倉庫,倉庫滿了就停止生產。消費者每次從倉庫中去一件物品,然后進行消費,倉庫空時就停止消費。

    ???解答:在J2SE1.5中的java.util.concurrent?新功能包提供一些實用的通用類供并行程序使用。其中的BlockingQueue接口及其實現類對于解決[生產者-消費者問題]非常方便。下面是實現的代碼(例子摘抄自jdk1.5幫助文檔,稍做修改):

    import?java.util.concurrent.ArrayBlockingQueue;
    import?java.util.concurrent.BlockingQueue;

    /**
    ?*?@author?Rebirth
    ?*/
    class?Consumer?implements?Runnable?{
    ?private?int?i=0;
    ?private?String?sName="";
    ?private?final?BlockingQueue?queue;
    ?Consumer(BlockingQueue?q,String?sName)?{?queue?=?q;this.sName=sName;?}
    ?/*?
    ??*?@see?java.lang.Runnable#run()
    ??*/
    ?public?void?run()?{
    ??while(i<5)?{?
    ???try{
    ????//消費產品
    ????consume(queue.take());??????????
    ?????????}
    ???catch?(InterruptedException?ex)?{
    ????System.out.println(ex.getMessage());
    ???}
    ???finally{i++;}
    ??}
    ?}
    ?private?void?consume(Object?product){
    ??System.out.println(sName?+?"?consume?"?+?product.toString());
    ?}
    }
    class?Producer?implements?Runnable?{
    ?private?int?i=0;
    ?private?String?sName="";?
    ?private?int?iNum=0;
    ?private?final?BlockingQueue?queue;
    ?Producer(BlockingQueue?q,String?sName)?{?queue?=?q;this.sName=sName;?}
    ?/*?(non-Javadoc)
    ??*?@see?java.lang.Runnable#run()
    ??*/
    ?public?void?run()?{
    ??while(i<10)?{?
    ???try{
    ????//生產產品
    ????queue.put(produce());?????????????
    ??????}catch?(InterruptedException?ex)?{
    ????System.out.println(ex.getMessage());
    ??????}finally{i++;}
    ??}??????
    ?}
    ?private?Object?produce(){
    ??String?sProduct?="p"?+?(++iNum);
    ??System.out.println(sName?+?"?product?"?+?sProduct);??
    ??return?sProduct;
    ?}
    }
    public?class?Factory?{
    ??public?static?void?main(String[]?args)?{
    ??????BlockingQueue?q?=?new?ArrayBlockingQueue(10);
    ??????Producer?p?=?new?Producer(q,"?p1?");
    ??????Consumer?c1?=?new?Consumer(q,"?c1?");
    ??????Consumer?c2?=?new?Consumer(q,"?c2?");
    ??????new?Thread(p).start();
    ??????new?Thread(c1).start();
    ??????new?Thread(c2).start();??????
    ????}
    }

    ???????BlockingQueue是線程安全的,當倉庫中已經沒有物品而消費者繼續往里面取時隊列自動進行阻塞。需要注意的是,BlockingQueue是不接受null值的,但嘗試將一個null值插入隊列,會拋出NullPointerException?例外。


    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
    、轉載請注明來處和原文作者。非常感謝。

    posted on 2006-06-11 12:56 草兒 閱讀(268) 評論(0)  編輯  收藏 所屬分類: Java編程經驗談
    主站蜘蛛池模板: 一级毛片免费播放男男| 激情小说亚洲色图| 91香蕉在线观看免费高清| 中文字幕无码精品亚洲资源网| 免费人人潮人人爽一区二区| 国产一区二区三区在线观看免费| 亚洲人成网站999久久久综合| 最近的免费中文字幕视频| 亚洲欧美国产欧美色欲| 四虎影视免费永久在线观看| 真正全免费视频a毛片| 全亚洲最新黄色特级网站 | 岛国av无码免费无禁网站| 2017亚洲男人天堂一| 免费毛片在线播放| 国产精品亚洲专区无码WEB| 亚洲成片观看四虎永久| a国产成人免费视频| 久久亚洲国产精品五月天| 最近最好最新2019中文字幕免费| 91亚洲国产成人久久精品网址| 日本精品人妻无码免费大全| 亚洲AV无码专区国产乱码不卡| 亚洲国产精品自产在线播放| 国产在线播放线91免费| 亚洲乱码一二三四区国产| 国产午夜免费秋霞影院| 两个人看的www免费| 亚洲国产成人无码av在线播放| 午夜高清免费在线观看| 国产精品免费αv视频| 亚洲精品综合久久中文字幕 | 乱人伦中文视频在线观看免费| 在线亚洲人成电影网站色www | 最近2019中文免费字幕| 免费精品国自产拍在线播放| 亚洲va久久久噜噜噜久久狠狠| 国产卡一卡二卡三免费入口| 国产成人无码精品久久久久免费| 亚洲欧洲日韩国产| 国产偷窥女洗浴在线观看亚洲|