我在我的应用程序中使用了ExecutorService executor = Executors.newFixedThreadPool(10)。这是一个静态变量。
corePoolsize是10个线程。假设所有10个线程当前都在运行,并分配了一个任务。我想知道如果我再创建一个任务并尝试运行它会发生什么。
我在我的系统中尝试了,但我看到的是任务正在运行,没有任何问题。
发布于 2015-12-02 18:05:18
当您在所有线程当前都处于活动状态时提交新任务时,该任务将以FIFO方式添加到队列中,并在一个线程可用时进行处理。这个队列是无界的,所以它可以容纳的最大元素是Integer.MAX_VALUE。
这在Executors.newFixedThreadPool的Javadoc中得到了回答
如果在所有线程都处于活动状态时提交其他任务,则它们将在队列中等待,直到有线程可用为止。如果任何线程在关机前的执行过程中由于失败而终止,则在需要执行后续任务时,将有一个新线程取而代之。
发布于 2015-12-02 18:05:04
直接取自Javadoc
如果在所有线程都处于活动状态时提交其他任务,则它们将在队列中等待,直到有线程可用为止
发布于 2015-12-02 18:27:44
Javadoc
在任何时候,至多"nThreads“线程都将是活动的处理任务。
可能是您之前执行的任何任务由于某些异常而被终止。
https://stackoverflow.com/questions/34039794
复制相似问题