1

我收到以下错误:

找不到匹配的构造函数:org.crawler.CrawlerUtils$fetch(org.series.crawler.site.SubSiteA)。

我正在尝试使用线程。我只使用了一次线程,我正在尝试做与在另一个项目中所做的相同的事情。

我有:

Class CrawlerUtils {
    public static void crawlSites(List<Site> sites) {
        def pool = Executors.newFixedThreadPool(MAX_THREADS)
        def ecs = new ExecutorCompletionService<Void>(pool);
        sites.each { ecs.submit(new fetch(it), Void) }
        sites.each { ecs.take().get() }
        pool.shutdown()
    }

    class fetch implements Runnable {
        Site site
        fetch(Site site) {
            this.site = site
        }
        public void run() {
            site.parse()
        }
    }
}

我尝试了这些(丑陋的)方法:

  • 创建一个接口(使用ISite 站点而不是fetch构造函数中的站点站点)
  • 在fetch类中的每个子类中放置一个构造函数
  • 在调用super()的每个子类中放置一个构造函数

任何的想法?

4

1 回答 1

5

作为crawlSites静态类Fetch(应该有一个大写字母以遵循任何形式的通用命名方案)也需要是静态的。

static class Fetch implements Runnable

不过我会使用 GPars ......看看指南的这一部分

你应该能够做到:

GParsPool.withPool {
  sites.eachParallel { site -> site.parse() }
}
于 2012-12-04T23:08:26.547 回答