多線程的notifyAll/wait控制

          Posted on 2007-11-09 01:31 dybjsun 閱讀(213) 評(píng)論(0)  編輯  收藏 所屬分類: 多線程主題
            當(dāng)多線程啟動(dòng)時(shí),怎么才能控制他們有秩序地執(zhí)行。本例模擬一個(gè)容器,當(dāng)容器里有東西時(shí),通知各個(gè)線程來(lái)取得這些東西,如果沒有取到東西,則進(jìn)入等待狀態(tài)。(特別注意在通知各個(gè)線程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?}
          主站蜘蛛池模板: 敦化市| 河南省| 房山区| 霍州市| 聂荣县| 南郑县| 大余县| 珠海市| 炉霍县| 昭苏县| 临汾市| 寻甸| 迁西县| 遂昌县| 汪清县| 普兰店市| 铜山县| 牡丹江市| 新乡县| 云霄县| 林口县| 和龙市| 西和县| 麻栗坡县| 子长县| 陕西省| 长兴县| 墨竹工卡县| 互助| 含山县| 阿克苏市| 舞钢市| 大同县| 大足县| 大港区| 怀仁县| 西乌珠穆沁旗| 金堂县| 珠海市| 平江县| 焦作市|