stackoverflowに関する別の質問で、クローラーが作成している生産者/消費者パターンにスレッドプールを使用できるというヒントを得ました。
しかし、私はそれを実装する方法を見つけることができません。
SOのプロデューサーコンシューマースレッドでは、プロデューサーコンシューマーを使用してプロデューサーとコンシューマーを管理します(私の場合はクローラー自体です。これは私のforループとそれほど変わりません)が、これは私の記事のコメント投稿者の意図(彼は私がforループを使用しているのを見ることができなかったので)。ワークロードはまだqueue
そこを介して共有されます。
また、この実装でオブジェクトを渡すことWebsite
(およびからExecutorService.submit()
削除すること)についても考えました。Runnable
Crawler
public class Website implements Runnable {
private URL url;
public Website(URL url) {
this.url = url;
}
@Override
public void run() {
Crawler crawler = new Crawler();
crawler.crawl(url);
}
}
しかし、問題はそれです
- 生成されているクローラーが多すぎると思います
- Crawler()は、すでにアクセスしたWebサイトのキューを想定しています
クローラーの問題にプロデューサー、コンシューマーパターンを適切に実装するにはどうすればよいですか?私はそれについて完全に混乱しています。私はウェブ上でそれについて非常に多くのウェブサイトをチェックしました、そしてすべてがそれを異なって使用しているようです。