0

我目前正在构建这个网络爬虫来获取起始网址的所有链接,并从这些链接中抓取所有链接等。我正在使用线程,所以每次进程完成时,都会调用一个新线程,我正在加载大约 1000 个线程,我使用了 thread.interrupt 函数,但它仍然没有删除线程并创建一个线程。我试图每次只使用一个线程或最多两个。我还注意到,一旦我运行了我的爬虫,我的互联网开始崩溃,这意味着网站在我打开我的网络爬虫之前不会加载。我想我发送了太多的 http 请求。如果有人知道如何限制线程或修复以下错误:

java.lang.outOfMemory : 无法创建本机线程

4

1 回答 1

1

改用线程池并以这种方式限制它。也内置于 java 中。创建一个并将您的爬虫作业添加到其中以执行。

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 回答