java - 杀死对象创建的线程

标签 java multithreading web-crawler crawler4j

我使用crawler4j创建了一个自定义爬虫。在我的应用程序中,我创建了很多 Controller ,一段时间后,系统中的线程数将达到最大值,JVM 将抛出异常。即使我在 Controller 上调用 ShutDown() 并将其设置为 null 并调用 System.gc(),我的应用程序中的线程保持打开状态,应用程序将崩溃。

我使用了 jvisualvm.exe (Java VisualVM),发现我的应用程序一度命中 931 个线程。

有没有办法可以立即终止crawler4j项目的CrawlController对象创建的所有线程? (或任何其他与此相关的对象)

最佳答案

我刚刚花了 2 个小时来解决完全相同的问题。我终于发现了这个bug的根源。如果创建一个 Controller ,但不启动它,shutdown() 不会终止创建的任何线程。相反,您必须使用以下内容:

controller.shutdown();
controller.getPageFetcher().shutdown();

其中 controller 是您的 CrawlController 实例。
我还在crawler4j项目页面上提出了这个问题,看起来这个问题将在3.6版本的发布中得到修复

关于java - 杀死对象创建的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644618/

相关文章:

java - 第一个使用 Apache Thrift 的程序——我应该在哪里定义接口(interface)?在客户端或服务器代码中

java - 使用 JSP 页面映射列表并在 Action 类中获取值。它将结果列表作为 Action 类中的笛卡尔积

Python 值错误 : too many values to unpack for crawler

python - 过滤掉 Python Mechanize 网络爬虫的图像/文件链接

python - 在 Scrapy 中本地运行所有的爬虫

用于收集集成统计信息的 java lib

java - org.apache.felix.ipojo.ComponentFactory 无法转换为 org.apache.felix.ipojo.Factory

c++ - 在 main 内部创建的线程和在函数内部创建的线程的行为是否应该不同?

c# - Hook 事件 Outlook VSTO 在主线程上继续工作

c# - 异常: Object synchronization method was called from an unsynchronized block of code