对于10个工作线程的固定/缓存线程池中可以添加到队列的Runnable
个数量,几乎没有任何限制。??
在我的应用程序中,我正在尝试添加100000 Runnable
个。
for (int i=0; i<100000; i++) {
executor.execute(new Task(i));
}
它是否会实际处理添加到队列中的所有Runnable
...?或者会抛出Exception
?
答案 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
,那么您仍将受到堆大小的限制。