我使用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/