Java线程池构造-“创建线程时”?

Java线程池构造-“创建线程时”?,java,concurrency,Java,Concurrency,各位成员,我正在查看ThreadPool构造函数ThreadPoolExecutors,而不是每次实例化新线程。我的问题是: JVM何时实际创建并启动新线程? JVM如何将新的可运行任务分配给已经启动的线程? JVM何时实际创建并启动新线程 这取决于您使用的框架。如果您使用的是自1.5版以来就位于JDK的ThreadPoolExecutor,则线程池是在提交第一个任务时创建的,而不是在创建ThreadPoolExecutor时创建的。下面的代码段来自java.util.concurrent.Th

各位成员,我正在查看ThreadPool构造函数ThreadPoolExecutors,而不是每次实例化新线程。我的问题是:

JVM何时实际创建并启动新线程? JVM如何将新的可运行任务分配给已经启动的线程?
JVM何时实际创建并启动新线程

这取决于您使用的框架。如果您使用的是自1.5版以来就位于JDK的ThreadPoolExecutor,则线程池是在提交第一个任务时创建的,而不是在创建ThreadPoolExecutor时创建的。下面的代码段来自java.util.concurrent.ThreadPoolExecutor:

public void executerunable命令{ 如果命令==null 抛出新的NullPointerException; /* *分三步进行: * *1.如果运行的线程少于corePoolSize,请尝试 *以给定命令作为第一个线程启动新线程 *对addWorker的调用以原子方式检查运行状态和 *workerCount,从而防止可能增加 *在不应该的情况下,通过返回false执行线程。 * *2.如果任务可以成功排队,那么我们仍然需要 *再次检查是否应该添加线程 *因为自从上次检查后,已有的已经死了 *自进入此方法后,池关闭。因此 *重新检查状态,如有必要,在以下情况下回滚排队 *已停止,如果没有线程,则启动新线程。 * *3.如果无法对任务排队,则尝试添加新任务 *线程。如果它失败,我们知道我们已关闭或饱和 *所以拒绝这个任务。 */ int c=ctl.get; 如果workerCountOfc 以ThreadPoolExecutor为例,它首先将任务放入工作队列,这是一个BlockingQueue,在ThreadPoolExecutor创建时创建,然后,当线程池中的一个工作线程完成最后一个任务时,它将尝试从工作队列中提取任务

但是请注意,所有的工人都是在最初的任务中被创造出来的,他们在一次被创造出来的时候就完成了工作

私有布尔addWorkerUnnable firstTask,布尔核心{
伙计们,我正试图以一种我认为合适的方式解决问题。如果有什么问题,请在投票被否决时留下评论,这将更有帮助。伙计们,尽管很高兴分享你对所问问题的看法。分享被否决的原因也很好,因为这将有助于我记住任何进一步的问题图雷