我在实践中遵循基于java 5的java并发性,在ThreadPoolExecutor中,当核心池大小设置为0时,任务直接进入队列。java 8的情况并非如此,即使核心池大小设置为0,也会创建一个新线程。
ThreadPoolExecutor with corePoolSize 0 should not execute tasks until task queue is full
因此,我的问题是,在java 8中将核心池大小设置为0的有效用例是什么,还是这样做不再有意义?
发布于 2020-05-26 15:18:00
当核心池为零时,Java5中ThreadPoolExecutor的奇怪行为是一个bug。它显然是在Java 6中悄悄地修复的。
事实上,这个问题显然是在Java7(根据https://bugs.openjdk.java.net/browse/JDK-7091003的说法)中重新出现的,这是一些返工的结果。然后,它被认为是一个错误,并加以修正。
请注意,实际上并发性将其描述为“看似奇怪的行为”,并且没有明确建议您应该在代码中利用它。
那么,将corePoolSize设置为零的实际用例是什么?
这样的用例之一是执行并发性在实践中的建议:
开发人员有时会尝试将核心大小设置为零,这样工作线程最终将被拆除,因此不会阻止JVM退出。
扩展来说,另一个用例是如果你想拆掉线程来回收资源.因为线程池不太可能在很长时间内被使用。
https://stackoverflow.com/questions/62023797
复制相似问题