我得到以下错误:
找不到匹配的构造函数: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()
}
}
}
我尝试了这些(丑陋的)方法:
- 创建接口(在fetch构造函数中使用ISite site而不是site site>)
- 在fetch类内的每个子类中放置一个构造函数
- 在每个调用super()的子类中放入一个构造函数
知道吗?
由于crawlSites
是静态的,类Fetch
(应该有一个大写字母来遵循任何形式的通用命名方案)也需要是静态的。
static class Fetch implements Runnable
不过我会用GPars。。。查看指南的这一部分
你应该能够做到:
GParsPool.withPool {
sites.eachParallel { site -> site.parse() }
}