2014-11-08 41 views
1

我写了一个可以打开很多网页的网络爬虫。正如你在下面的图片中看到的,一些线程似乎已经完成(白色),但这意味着什么?我有一些错误吗?有资源泄漏吗?而且,我怎么能知道这些线程在哪里生成以及它们为什么完成?我应该担心他们吗?成品线:我应该忽略它们吗?

VisualVM

的问题是,如果我把它跑了一天,我得到数以千计的线程,所以我很担心。

+0

如果你在一天中建立的线程越来越多,而且他们从不拆卸,那么是的,你有泄漏。我会写一个单元测试,声明代码在完成其任务后将其资源撕下。 – 2014-11-08 11:13:35

回答

2

启动大量线程就可以了,只要其中没有太多的线程同时处于活动状态即可。 “完成”的线程不再有效,所以它们不会引起问题。

话虽如此,Java线程创建起来相当昂贵(在Erlang等其他语言中,这可能会有所不同),并且您通常不希望/不需要在过程中创建大量线程你的应用程序的生活。您可能想要使用线程池。这将重新使用线程而不是多次启动新线程。

1

完成的线程不会终止您的应用程序。但是不要创建我们将要完成的新线程,而是使用一个线程池来重用它们。

相关问题