可以在固定/缓存的线程池中将多少Runnable添加到队列中?

时间:2014-08-25 18:06:20

标签: java multithreading threadpool executorservice executor

对于10个工作线程的固定/缓存线程池中可以添加到队列的Runnable个数量,几乎没有任何限制。??

在我的应用程序中,我正在尝试添加100000 Runnable个。

for (int i=0; i<100000; i++) {
    executor.execute(new Task(i));
} 

它是否会实际处理添加到队列中的所有Runnable ...?或者会抛出Exception

2 个答案:

答案 0 :(得分:4)

可以添加到固定/缓存线程池中的队列的Runnable的最大数量由分配给JVM的内存决定。

一旦消耗掉所有内存,JVM将抛出

  

线程中的异常&#34; main&#34; java.lang.OutOfMemoryError:无法创建新的本机线程

错误消息。

答案 1 :(得分:1)

假设您使用java.util.concurrent.Executors.newFixedThreadPool()方法,限制为Integer.MAX_INT,至少在OpenJDK实现中。

此方法的OpenJDK 8实现会创建一个新的LinkedBlockingQueue,其默认大小为Integer.MAX_INT

因此,默认固定线程池中Runnables的最大数量为Integer.MAX_INT。但请注意,如果您的堆不够大,无法存储那么多Runnables,那么您仍将受到堆大小的限制。