【发布时间】:2013-02-01 10:48:14
【问题描述】:
我使用 crawler4j 创建了一个自定义爬虫。在我的应用程序中,我创建了很多控制器,一段时间后,系统中的线程数将达到最大值,JVM 将抛出异常。即使我在控制器上调用ShutDown(),并将其设置为null 并调用System.gc(),我的应用程序中的线程仍保持打开状态,应用程序将崩溃。
我使用了jvisualvm.exe (Java VisualVM),发现我的应用程序在某一时刻遇到了 931 个线程。
有没有办法可以立即杀死由 crawler4j 项目的 CrawlController 对象创建的所有线程? (或与此相关的任何其他对象)
【问题讨论】:
-
你可以控制线程的 run() 方法吗?你能告诉我们吗?听起来线程不会死。
-
我使用的是 crawler4j 类的 .jar 文件。但是,如果我找不到一个简单的方法来做到这一点,我可以访问 crawler4j 的源代码。我想停止 crawler4j 的控制器线程。
-
来自 crawler4j 的主页 >您还应该实现一个控制器类,它指定爬取的种子、中间爬取数据应该存储的文件夹和并发线程数:
-
我正在这样做,但我想创建一个可以关闭由 crawler4j 创建的线程的控制器
-
我只是看了一下代码......每个爬虫控制器似乎都有一个MonitorThread......乍一看没有看到如何实现。
标签: java multithreading web-crawler crawler4j