當下載第一個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
           
          主站蜘蛛池模板: 鄱阳县| 如东县| 永兴县| 三明市| 资源县| 上虞市| 沾化县| 南宫市| 濉溪县| 科技| 泰兴市| 武山县| 苏州市| 屯昌县| 犍为县| 广南县| 西充县| 陵水| 沙河市| 拜城县| 宁夏| 鄄城县| 连城县| 磐安县| 沁水县| 堆龙德庆县| 宁夏| 苗栗县| 清镇市| 绩溪县| 北京市| 罗田县| 邯郸市| 吴忠市| 南靖县| 南涧| 商水县| 高清| 仪征市| 星子县| 剑阁县|