2012-03-30 128 views
0

我在java中有兩個類需要同時運行 - 一個Crawler類(基本上實現了一個web crawler,並在遇到它時繼續打印url)和一個Indexer類,到目前爲止,它應該只是打印抓取的網址。Java - 更新靜態變量

對於這一點,我的索引類有一個隊列:

public static Queue<String> urls = new LinkedList(); 

在我爬行類的toVisit()函數,我有以下幾點:

Indexer.urls.add(url) // where url is a String 

爬行工作完全很好,因爲它會打印出所遇到的所有網址,但由於某些原因,這些網址不會添加到我的Indexer類中的隊列中。任何想法爲什麼這可能是這種情況?

的toVisit()從Crawler.java方法如下:從我的索引類

public void visit(Page page) { 
      int docid = page.getWebURL().getDocid(); 
      String url = page.getWebURL().getURL(); 
      String domain = page.getWebURL().getDomain(); 
      String path = page.getWebURL().getPath(); 
      String subDomain = page.getWebURL().getSubDomain(); 
      String parentUrl = page.getWebURL().getParentUrl(); 

      System.out.println("Docid: " + docid); 
      System.out.println("URL: " + url); 
      System.out.println("Domain: '" + domain + "'"); 
      System.out.println("Sub-domain: '" + subDomain + "'"); 
      System.out.println("Path: '" + path + "'"); 
      System.out.println("Parent page: " + parentUrl); 


      Indexer.urls.add(url); 

      System.out.println("============="); 
    } 

代碼:

public static Queue<String> urls = new LinkedList(); 

public static void main(String[] args) 
{ 
    while(urls.isEmpty()) 
     { 
      //System.out.println("Empty send queue"); 
      Thread.sleep(sleepTime); 
     } 

     System.out.println(urls.poll()); 

} 
+0

請發佈'toVisit()'方法 – satoshi 2012-03-30 09:18:01

+0

是你運行兩個線程即:1.Crawler線程2.Indexer線程? – cherit 2012-03-30 09:18:58

+0

或偶然是你在一個類加載器中運行Crawler,而另一個類中是否使用索引器? (例如,兩個不同的Web應用程序?) – BigMike 2012-03-30 09:20:16

回答

0

好了,所以我做的BigMike的建議解決我的問題。我在兩個類中實現了Runnable接口,然後在新的第三個類的主函數中將這兩個類作爲線程運行。

感謝大家的全力幫助! :)