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クラス内の各サブクラスにコンストラクターを配置します
  • 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 に答える