<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編程經驗談
    主站蜘蛛池模板: 久久亚洲精品无码播放| 在线观看成人免费视频| 亚洲啪啪AV无码片| 一级全免费视频播放| 亚洲日本一区二区三区在线不卡| baoyu116.永久免费视频| 波多野结衣免费视频观看| 日韩在线视频免费| 日韩亚洲变态另类中文| 黄色网址在线免费| 亚洲黄色免费在线观看| a毛片基地免费全部视频| 亚洲AV电影院在线观看| 84pao强力永久免费高清| 激情内射亚洲一区二区三区爱妻| 相泽南亚洲一区二区在线播放| 一级黄色毛片免费看| 国产亚洲精品不卡在线| 外国成人网在线观看免费视频| 午夜一区二区免费视频| 国产成人精品亚洲| 国产综合亚洲专区在线| 亚洲一级免费视频| 亚洲精品无AMM毛片| 4338×亚洲全国最大色成网站| 亚洲一区中文字幕在线电影网| 一本久久免费视频| 亚洲人成中文字幕在线观看| 91精品国产免费入口| 亚洲人成电影网站色| 亚洲人成伊人成综合网久久久| 无码亚洲成a人在线观看| 在线播放亚洲第一字幕| h视频在线免费看| 特级毛片免费播放| 亚洲精品偷拍无码不卡av| 国产一级淫片视频免费看| 国产精品1024在线永久免费 | 中文无码日韩欧免费视频| 亚洲国产人成在线观看69网站| a级黄色毛片免费播放视频|