方法run()不执行

时间:2011-01-08 06:47:07

标签: java multithreading

我正在使用java。我正在尝试执行一个线程,但我遇到的问题是 thread.start()方法正在执行,但正如我们所知,当我们调用线程的start方法时,会在内部调用run()方法。 但在我的情况下,run()方法没有被执行:

public static void main(String[] args) throws Exception {
    parseArguments(args);

    ScraperStore scraperStore = ScraperStore.getInstance();
    SocialSiteManager siteManager = new SocialSiteManager();
    sitesToScrape = siteManager.getSocialSitesToScrape();

    for (SocialSite site : sitesToScrape) {
        ScrapeThread srThread = new ScrapeThread("srThread");
        Thread scraper = new Thread(srThread);
        srThread.setSiteToScrape(site);
        srThread.setPageTypeToScrape(startPageToScrape);
        srThread.setTypeToScrape(typeToScrape);
        ArrayList<String> listOfValues = ScraperStore.getNextUrlToScrape(startPageToScrape, site);
        srThread.setTypeToScrape(typeToScrape);

        try {
            srThread.setUrlOwnedBy(listOfValues.get(0));
            srThread.setStartUrl(listOfValues.get(1));
            scraper.start();

            boolean state = scraper.isAlive();
            scrapeThreads.add(scraper);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}    

线程类:

class ScrapeThread {

    public ScrapeThread(String threadName) {
        thread = new Thread(this,threadName);
        System.out.println(thread.getName());
    }

}

运行方法:

public void run() {
    try {
        System.out.println("in the run method");
        selenium = new DefaultSelenium(config.getHost(), Integer.parseInt(config.getPort()), 
                config.getBrowser(), config.getUrl());
        selenium.start();
        Integer count = 0;

        while (startUrl != null) {
            HtmlPage homePage = new HtmlPage();
            homePage.setCreatedBy(new String());
            homePage.setCreatedon(new String());
            homePage.setModifiedBy(new String());
            homePage.setModifiedOn(new String());
            homePage.setNoOfItemsFound(new String());
            homePage.setOwnedBy(urlOwnedBy);
            homePage.setPageType(scraper.getPageTypeToScrape());
            homePage.setPageUrl(startUrl);

            proxy = getInitialisedProxy();
            scraper.setNavigator(proxy.getNavigator());
            scraper.setStartUrl(startUrl);

            try {
                scraper.initialize();
            } catch (MyException e) {
                if (status == false){
                    throw new Exception(MyException.NOTFOUND);
                }
            }
        }
    }
}

我正在使用sellinium。我有没有机会因为硒而得到这个问题?

3 个答案:

答案 0 :(得分:1)

查看代码并将其与代码进行比较。

public static void main(String []args)
{
   Runnable inst=new Runnable()
    {
      public void run()
        {
           System.out.println("Thread statement!");
         }
     };

   Thread thrd=new Thread(inst);
   thrd.start();
}

答案 1 :(得分:0)

你怎么知道run方法没有被执行。你有没有对run方法进行追踪?

//Old
new Thread(niidleThread,"scraper"); scraper.start()

// new
new Thread(srThread);  or
new Thread(srThread,"scraper");  

尝试我上面给出的新内容;

答案 2 :(得分:0)

只是粗略地回顾一下你的代码...我发现你可能已经有点开心了。考虑:

ScrapeThread srThread = new ScrapeThread("srThread"); // This is creating your ScrapeThread object (which should really implement the Runnable interface)
    Thread scraper = new Thread(srThread); // This is creating a thread which wraps another thread... take this out.
    srThread.setSiteToScrape(site);
    srThread.setPageTypeToScrape(startPageToScrape);
    srThread.setTypeToScrape(typeToScrape);
    ArrayList<String> listOfValues =              ScraperStore.getNextUrlToScrape(startPageToScrape, site);
        srThread.setTypeToScrape(typeToScrape);
        try {
            srThread.setUrlOwnedBy(listOfValues.get(0));
            srThread.setStartUrl(listOfValues.get(1));
            scraper.start(); // You would want to replace this with srThread.start(); once fixing the items I addressed above
            boolean state=scraper.isAlive();
            scrapeThreads.add(scraper);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

http://www.javabeginner.com/learn-java/java-threads-tutorial可能对你有所帮助。