我目前正在构建这个网络爬虫来获取起始网址的所有链接,并从这些链接中爬行所有链接等。我正在使用线程,因此每次进程完成时,都会调用一个新线程,我加载了大约 1000 个线程,并且使用了 thread.interrupt 函数,但它仍然没有删除线程并创建线程。我试图每次只使用一个线程或最多两个。我还注意到,一旦我运行我的爬虫,我的互联网就会开始崩溃,这意味着在我关闭网络爬虫之前网站不会加载。我认为我发送了太多 http 请求。如果有人知道如何限制线程或修复以下错误:
java.lang.outOfMemory:无法创建 native 线程
最佳答案
改用线程池并以这种方式限制它。也内置于java中。 创建一个并将您的爬虫作业添加到其中以供执行。
ExecutorService executor = Executors.newFixedThreadPool(100);
然后: 执行器.execute(new LinkCrawler(...));//在这里添加您的链接爬虫。
参见:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html 甚至包含一个与网络相关的示例。
关于java - JAVA 中的网络爬虫。 java.out.lang.outofmemory 无法创建 native 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10404562/