gpt4 book ai didi

java - 线程池中实际创建线程

转载 作者:行者123 更新时间:2023-11-30 06:54:19 25 4
gpt4 key购买 nike

如果我有一个固定大小的线程池,它什么时候会真正调用Thread.start()来启动线程? (它会在创建时启动它们吗?还是会等到我开始提交任务?)

最佳答案

如果您像这样创建固定大小的线程池:

ExecutorService es = Executors.newFixedThreadPool(5);

最初没有创建任何线程。当您提交第一个任务时,仅创建 1 个线程(其名称为“pool-1-thread-1”。

对于每个额外提交的任务,都会创建一个达到指定固定大小(本示例中为 5)的新线程,即使这些任务实际上并未并行运行。

例如,如果您只提交 3 个任务,则只会创建 3 个具有以下名称的线程:
池-1-线程-1
池-1-线程-2
池-1-线程-3

此优化很重要,因为创建新线程是一项占用大量资源的操作。

使用 LockSupport.Park 方法将当前未执行任务的任何线程置于等待模式。

当所有线程都忙于执行任务时,额外提交的任务将被放入阻塞队列中,等待线程变得可用。

因此,为了回答您的问题,线程仅在首次提交任务时开始运行。

此信息适用于 JDK 7。我尚未检查其他实现。

关于java - 线程池中实际创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42120226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com