Java 完成的线程:我应该忽略它们吗?

Java 完成的线程:我应该忽略它们吗?,java,multithreading,visualvm,Java,Multithreading,Visualvm,我写了一个可以打开很多网页的网络爬虫。正如你在下图中看到的,有些线看起来是白色的,但这意味着什么呢?我有臭虫吗?是否存在资源泄漏?还有,我如何知道这些线程是在哪里生成的,以及它们为什么要完成?我应该担心他们吗 问题是,如果我让它运行一天,我会得到数千个线程,所以我很担心它。启动很多线程是可以的,只要不是太多的线程同时处于活动状态。完成的线程不再处于活动状态,因此不会导致问题 话虽如此,在Java中创建线程非常昂贵,但在其他语言(如Erlang)中可能会有所不同,而且在应用程序的生命周期中,您通常

我写了一个可以打开很多网页的网络爬虫。正如你在下图中看到的,有些线看起来是白色的,但这意味着什么呢?我有臭虫吗?是否存在资源泄漏?还有,我如何知道这些线程是在哪里生成的,以及它们为什么要完成?我应该担心他们吗


问题是,如果我让它运行一天,我会得到数千个线程,所以我很担心它。

启动很多线程是可以的,只要不是太多的线程同时处于活动状态。完成的线程不再处于活动状态,因此不会导致问题


话虽如此,在Java中创建线程非常昂贵,但在其他语言(如Erlang)中可能会有所不同,而且在应用程序的生命周期中,您通常不希望/不需要创建大量线程。您可能需要使用线程池。这将重复使用线程,而不是多次启动新线程

可以启动很多线程,只要它们中没有太多同时处于活动状态。完成的线程不再处于活动状态,因此不会导致问题


话虽如此,在Java中创建线程非常昂贵,但在其他语言(如Erlang)中可能会有所不同,而且在应用程序的生命周期中,您通常不希望/不需要创建大量线程。您可能需要使用线程池。这将重复使用线程,而不是多次启动新线程

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

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

如果一天中创建了越来越多的线程,而这些线程从未中断,那么是的,您有漏洞。我会编写一个单元测试,断言代码在完成任务后会破坏它的资源。如果你在一天中建立了越来越多的线程,而它们从未破坏,那么是的,你有漏洞。我将编写一个单元测试,断言代码在完成任务后会中断其资源。