java - 关于Java ExecutorService newFixedThreadPool的几个问题

标签 java executorservice

请注意,我通常会在针对该问题进行 20 多次谷歌搜索后提出问题。但我还是无法理解。所以我需要你的帮助。

基本上我不明白newFixedThreadPool的具体用法

  1. newFixedThreadPool(10) 是否意味着有十个不同的线程?或者这是否意味着它可以有 10 个相同的线程?或者两者都有? 我使用 submit() 方法执行了 20 多次,并且有效。

  2. submit() 是否打印一个值?或者您是否将线程放入 ExecutorService 中?

最佳答案

简单来说,任务是可以并行执行的小代码单元(代码段)。线程(在线程池中)是执行它们的东西。您可以将线程视为 worker ,将任务视为工作。工作可以并行完成, worker 也可以并行工作。 worker 们在工作中工作。

那么,回答你的问题:

  1. newFixedThreadPool(int nThreads) 创建在同一输入队列上运行的 nThread 线程的线程池。 nThreads 是在任何给定时间可以运行的最大线程数。每个线程可以运行不同的任务。在您的示例中,您最多可以同时运行 10 个任务。 (该文档可以在 here 找到,感谢 @hovercraft-full-of-eels)
  2. submit() 将给定任务推送到由线程池中的线程共享的事件队列中。一旦线程可用,它就会从队列前面取出一个任务并执行它。它不应该打印任何内容,除非您传递给它的 Runnable 中包含打印语句。但是,当您提交任务时,打印语句可能无法正确打印!一旦线程执行该特定任务,它将打印。 (文档可以在 here 找到)

关于java - 关于Java ExecutorService newFixedThreadPool的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52029421/

相关文章:

java - 难以理解关闭 Hook 何时执行以及如何终止 ExecutorService

java - 遍历 List<Future> 对象抛出 IndexOutOfBounds 异常

java - 如何使用 ThreadPoolTask​​Executor 设置任务超时

java - 如何在Java中检查JDBC表中的某些列是否为空

java - 字符串和字节数组中 BigInteger 值的差异

java - 使用复制构造函数而不是 Object.clone 进行深度复制的正确方法

java - ExecutorService 应该在 bean 的整个生命周期中都处于 Activity 状态,或者应该具有狭窄的(方法)范围

java - 我不能 @Autowire 一个存在于依赖库 Jar 中的 Bean 吗?

java - 将变量传递给 catch - Java

java - 我的 ExecutorService 实现正确吗?