在Java中提交ExecutorService混淆

时间:2016-07-20 17:20:28

标签: java multithreading executorservice

这是我所指的方法,想知道我是否调用submit,而不使用Future的get方法来检索结果,是否会有任何线程泄漏(我的意思是线程池中的线程永远不会能够再次重用,因为它的结果未被检索),这将影响未来整个线程池的性能?感谢。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html#submit-java.util.concurrent.Callable-

的问候, 林

1 个答案:

答案 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

我快速浏览了一下,但我没有时间深入研究它。

正如我在上述评论中所说的那样,我会写一个测试,并自己找出是否有任何疑问。