java - JAVA 中的网络爬虫。 java.out.lang.outofmemory 无法创建 native 线程

标签 java multithreading web-crawler

我目前正在构建这个网络爬虫来获取起始网址的所有链接,并从这些链接中爬行所有链接等。我正在使用线程,因此每次进程完成时,都会调用一个新线程,我加载了大约 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/

相关文章:

java.lang.RuntimeException : Unable to instantiate activity ComponentInfo has no zero argument constructor

java - 在Java中,我可以依靠引用分配是原子的来实现写时复制吗?

java线程同步问题,如何实现observable线程

java - 如何减少/改变爬行后的延迟?

php - 我可以在我的网站上提供网站审核工具吗?

java - 双击 JTree 节点并获取其名称

Java作业帮助

c# - 线程、事件和 GUI

python - 网络爬行 : python saving file with -o file. json as utf-8: 输出显示像\u00a9这样的字符

java - 在 tomcat 中使用上下文条目运行 Web 应用程序