當下載第一個URL時(一般是網站主頁),如果等待時間過長,那么其他線程要么會認為網站已下載完而結束,要么會在下面標*代碼處拋出NullPointerException, 很少能夠存活下來。

          else if(queueSize() == 0)       /* queueSize()已經被同步 */
          {
              break;
          }
          URLToDownload nextURL;
          synchronized(queue)
          {
              nextURL = queue.getNextInQueue();
              downloadsInProgress++;
          }
          synchronized(urlsDownloading)
          {
              urlsDownloading.add(nextURL);
          }
          int newDepth = nextURL.getDepth() + 1; **********************


          估計可能是線程交叉了,還沒來得及同步就跑到后面去執行getDepth()了。
          nextURL = queue.getNextInQueue();后面加上判斷就OK了:

          synchronized(queue)
          {
              nextURL = queue.getNextInQueue();
              if(nextURL == null)
              {
                  continue;
              }

              downloadsInProgress++;
          }




          版權所有 羅明
          posted on 2006-02-16 14:10 羅明 閱讀(1107) 評論(0)  編輯  收藏 所屬分類: Java
           
          主站蜘蛛池模板: 江西省| 安塞县| 察隅县| 乐清市| 台安县| 广元市| 南开区| 黄浦区| 玉溪市| 沈阳市| 桐乡市| 巢湖市| 濮阳市| 景泰县| 宝山区| 霍州市| 秀山| 枣强县| 合作市| 望谟县| 田阳县| 茌平县| 德州市| 新沂市| 库尔勒市| 江阴市| 安多县| 阳江市| 瑞安市| 亚东县| 交口县| 西平县| 北票市| 巴东县| 玛曲县| 鄂托克前旗| 平凉市| 台东县| 西乌| 微博| 霍州市|