这是我所指的方法,想知道我是否调用submit,而不使用Future的get方法来检索结果,是否会有任何线程泄漏(我的意思是线程池中的线程永远不会能够再次重用,因为它的结果未被检索),这将影响未来整个线程池的性能?感谢。
的问候, 林
答案 0 :(得分:2)
您需要知道的一件事是ExecutorService
是一个接口,而不是一个类,因此对于ExecutorService
的不同实现,的答案可能不同。
话虽如此,如果ExecutorService
以您担心的方式行事,对大多数应用程序都没有意义。如果每个工作线程将其结果存储在返回给客户端的Future
对象中,然后忘记结果,忘记Future
,那就更有意义了。下一个任务。
IF 如何实施,如果您的代码也忘记了Future
,那么Future
和结果将由GC收集,这将是它的结束。
这对我来说是有意义的实施。您可以通过检查源代码自己查看OpenJDK项目中的ThreadPoolExecutor
类是如何实现的:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/concurrent
我快速浏览了一下,但我没有时间深入研究它。
正如我在上述评论中所说的那样,我会写一个测试,并自己找出是否有任何疑问。