BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          相冊

          搜索

          •  

          最新評論

          多線程的notifyAll/wait控制

          Posted on 2007-11-09 01:31 dybjsun 閱讀(213) 評論(0)  編輯  收藏 所屬分類: 多線程主題
            當多線程啟動時,怎么才能控制他們有秩序地執行。本例模擬一個容器,當容器里有東西時,通知各個線程來取得這些東西,如果沒有取到東西,則進入等待狀態。(特別注意在通知各個線程notifyAll和等待wait這些方法一定要寫在同步塊中)
          ?1?package?com.noahsi.fulltextsearch.index.basic;
          ?2?
          ?3?import?java.util.ArrayList;
          ?4?import?java.util.List;
          ?5?
          ?6?import?com.noahsi.fulltextsearch.index.model.LinkModel;
          ?7?import?com.noahsi.fulltextsearch.util.Debug;
          ?8?
          ?9?public?class?Container?{
          10?
          11??private?List?container?=?null;
          12?
          13??public?Container()?{
          14???container?=?new?ArrayList();
          15??}
          16?
          17??public?Container(LinkModel?model)?{
          18???container?=?new?ArrayList();
          19???container.add(model);
          20??}
          21?
          22??public?Container(List?list)?{
          23???container?=?new?ArrayList();
          24???container.addAll(list);
          25??}
          26?
          27??public?synchronized?void?listener()?{
          28???if?(container.size()?>?0)?{
          29????this.notifyAll();
          30???}
          31??}
          32?
          33??public?synchronized?LinkModel?getLinkModel()?{
          34???if?(container.size()?==?0)?{
          35????try?{
          36?????this.wait();
          37????}?catch?(InterruptedException?ie)?{
          38????}
          39????return?null;
          40???}
          41???return?(LinkModel)?container.remove(0);
          42??}
          43?
          44??public?synchronized?void?putLinksModel(List?links)?{
          45???LinkModel?temp?=?null;
          46???for?(int?i?=?0;?i?<?links.size();?i++)?{
          47????temp?=?(LinkModel)?links.get(i);
          48????if?(!container.contains(temp))?{
          49?????container.add(temp);
          50????}
          51???}
          52???this.notifyAll();
          53??}
          54?
          55??public?synchronized?void?putLinkModel(LinkModel?model)?{
          56???if?(model?!=?null)?{
          57????container.add(model);
          58???}
          59???this.notifyAll();
          60??}
          61?
          62??public?synchronized?void?active()?{
          63???this.notifyAll();
          64??}
          65?
          66??public?int?getSize()?{
          67???return?container.size();
          68??}
          69?}
          主站蜘蛛池模板: 福清市| 马山县| 台州市| 丰宁| 定边县| 阳山县| 大化| 卢湾区| 深水埗区| 鹤壁市| 广平县| 依安县| 莱阳市| 湖口县| 武城县| 新安县| 湘乡市| 内乡县| 公安县| 张家川| 东乡族自治县| 崇阳县| 黄山市| 铁岭县| 西城区| 西宁市| 凤凰县| 兴安盟| 海盐县| 特克斯县| 礼泉县| 桦川县| 营山县| 平阳县| 临漳县| 扬州市| 莱州市| 广元市| 思南县| 贡山| 桓仁|