gpt4 book ai didi

java - Java 中的线程池究竟在做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:52 25 4
gpt4 key购买 nike

线程池与任何 ExecutorServices 一样,我们定义了一个大小为 3 的新固定池。现在我有一个包含大约 10000 个可运行任务的队列。对于执行上述过程,我有这些疑问 -

  1. 要执行上述流程,执行者是否会一次只让任务队列中的 3 个线程运行?

  2. Pool 将承载 3 个 Threads ,而这 3 个线程将只负责执行所有 10000 个任务。如果它是正确的,单个线程如何运行不同的可运行任务,因为最终这些任务也是线程本身,并且在任何作业/任务的运行过程中,您可以为池线程分配新的责任。

最佳答案

  1. 是的,如果您实际上正在使用 Executors.newFixedThreadPool(3)

  2. ,一次最多只有 3 个线程在池中
  3. 10,000 个任务不是线程,它们只是RunnablesThread 必须通过Thread#start 启动才能真正创建系统线程。任务(Runnable 的实例)被放置在 BlockingQueue 中。线程池中的线程将轮询 BlockingQueue 以寻找要运行的任务。当他们完成任务时,他们返回到队列中去拿另一个。如果添加了更多任务,则根据该队列的实现规则将它们插入到 BlockingQueue 中。对于大多数队列来说,这是先进先出的,但是 PriorityQueue 实际上使用 Comparator 或自然顺序来对插入的任务进行排序。

关于java - Java 中的线程池究竟在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360974/

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