Java - 更新静态变量

时间:2012-03-30 09:15:51

标签: java static static-members

我在java中有两个需要同时运行的类 - 一个Crawler类(基本上实现了一个Web爬虫,并在遇到它们时不断打印出来)和一个Indexer类,截至目前,应该只是打印被抓取的网址。

为此,我的Indexer类有一个队列:

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

在我的Crawler类的toVisit()函数中,我有以下内容:

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

Crawler工作正常,因为它打印出它遇到的所有网址,但由于某种原因,这些网址不会被添加到我的Indexer类的Queue中。知道为什么会这样吗?

Crawler.java中的toVisit()方法如下:

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("=============");
    }

我的Indexer类的代码:

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() );

}

1 个答案:

答案 0 :(得分:0)

好的,所以我按照BigMike的建议解决了我的问题。我在我的两个类中实现了Runnable接口,然后在新的第三个类的main函数中将这两个类作为线程运行。

感谢大家的帮助! :)