0

現在、この Web クローラーを構築して、開始 URL のすべてのリンクを取得し、それらのリンクからすべてのリンクをクローラーなどに取得しています。私はスレッドを使用しているため、プロセスが完了するたびに新しいスレッドが呼び出され、1000 スレッドのようにロードされ、thread.interrupt 関数を使用しましたが、スレッドを削除して作成していませんでした。毎回または最大2つのスレッドのみを使用しようとしています。また、クローラーを実行すると、インターネットがクラッシュし始め、Web クローラーをオフにするまで Web サイトが読み込まれないことにも気付きました。送信している HTTP リクエストが多すぎると思います。スレッドを制限する方法または以下のエラーを修正する方法を誰かが知っている場合:

java.lang.outOfMemory : ネイティブ スレッドを作成できません

4

1 に答える 1

1

代わりにスレッドプールを使用し、そのように制限してください。Javaにも組み込まれています。1つ作成し、クローラージョブを追加して実行します。

ExecutorService executor = Executors.newFixedThreadPool(100);

そして:executor.execute(new LinkCrawler(...)); //ここにリンククローラーを追加します。

参照:http ://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html ネットワーク関連の例も含まれています。

于 2012-05-01T21:27:51.520 に答える