Java 执行器服务多线程

Java 执行器服务多线程,java,multithreading,threadpool,executorservice,Java,Multithreading,Threadpool,Executorservice,我在应用程序中使用了ExecutorService executor=Executors.newFixedThreadPool(10)。这是一个静态变量 corePoolsize是10个线程。假设所有10个线程当前都在运行,并分配了一个任务。我想知道如果我再创建一个任务并尝试运行它会发生什么 我在我的系统中进行了尝试,但我看到任务运行没有任何问题。直接从Javadoc获取 如果在所有线程都处于活动状态时提交其他任务,它们将在队列中等待,直到有线程可用 当您在所有线程当前都处于活动状态时提交新任务

我在应用程序中使用了
ExecutorService executor=Executors.newFixedThreadPool(10)
。这是一个静态变量

corePoolsize
是10个线程。假设所有10个线程当前都在运行,并分配了一个任务。我想知道如果我再创建一个任务并尝试运行它会发生什么


我在我的系统中进行了尝试,但我看到任务运行没有任何问题。

直接从Javadoc获取

如果在所有线程都处于活动状态时提交其他任务,它们将在队列中等待,直到有线程可用


当您在所有线程当前都处于活动状态时提交新任务时,它将以FIFO方式添加到队列中,并在一个线程可用时进行处理。此队列是无界的,因此它可以容纳的最大元素数为
Integer.MAX\u VALUE

这在Javadoc中得到了回答:

如果在所有线程都处于活动状态时提交其他任务,它们将在队列中等待,直到有线程可用。如果任何线程在关机之前的执行过程中由于故障而终止,那么如果需要执行后续任务,将使用一个新线程代替它

Javadoc

在任何时候,最多“n线程”将是活动的处理任务


可能是您以前执行的任何任务由于某些异常而终止。

您的系统通常有多个处理器。 这就是为什么你看不出有什么不同

即使将线程池称为10,实际上JVM将线程均匀地分布到系统中的所有处理器。 因此,用于存储即将到来的任务的队列永远不会因为只有10个线程而满


我猜;即使使用Integer.MAX_值的任务数,等待队列也不会完全加载,因为多个处理器会占用任务并在它们之间进行分配。

我猜;即使使用Integer.MAX_值的任务数,等待队列也不会完全加载,因为多个处理器会占用这些任务并在它们之间进行分配。正如我对您的答案所作的评论,这使得我们假设作业完成得比实际快submitted@MrWiggles还有哪个答案?为什么会做出这样的假设?如果作业没有比提交的更快完成,它们会被添加到队列中,这正是我所说的。对不起-不是你的答案-@Anirbandbnaths回答这根本不能回答OPs的问题。他们特别想知道当所有10个线程都很忙而您提交另一个线程时会发生什么task@MrWiggles-但她提供的数据不正确,如果已经有10个线程正在执行,那么其他任务如何开始执行。请参阅其他答案,他们精确地解释了发生了什么?如果新工作提交的速度快于完成的速度会怎样?@Rashmi肯定在发送低负载任务,这就是为什么她看不到任何区别。