Java 多少可运行';是否可以将添加到固定/缓存线程池中的队列?
在一个固定/缓存的线程池(比如10个工作线程)中,可以添加到队列中的Java 多少可运行';是否可以将添加到固定/缓存线程池中的队列?,java,multithreading,threadpool,executorservice,executor,Java,Multithreading,Threadpool,Executorservice,Executor,在一个固定/缓存的线程池(比如10个工作线程)中,可以添加到队列中的可运行的数量实际上有没有限制 在我的应用程序中,我试图添加100000个可运行的Runnable for (int i=0; i<100000; i++) { executor.execute(new Task(i)); } for(int i=0;i可添加到固定/缓存线程池中队列的可运行的的最大数量由分配给JVM的内存决定 一旦消耗了所有内存,JVM将抛出 线程“main”java.lang.OutOfMem
可运行的数量实际上有没有限制
在我的应用程序中,我试图添加100000个可运行的Runnable
for (int i=0; i<100000; i++) {
executor.execute(new Task(i));
}
for(int i=0;i可添加到固定/缓存线程池中队列的可运行的
的最大数量由分配给JVM的内存决定
一旦消耗了所有内存,JVM将抛出
线程“main”java.lang.OutOfMemoryError中出现异常:无法创建新的本机线程
错误消息。假设您正在使用该方法,则限制为Integer.MAX_INT
,至少在OpenJDK实现中是这样
此方法的OpenJDK 8实现创建了一个新的,默认为最大大小Integer.max_INT
因此,默认固定线程池中的可运行文件
的最大数量是整数。MAX_INT
。但是,请注意,如果堆不够大,无法存储那么多可运行文件
,则仍然会受到堆大小的限制。没有单一答案,这取决于执行器的配置方式。I怀疑其中一个限制因素是RAM的数量。或者JVM的最大堆大小。它应该处理它们,直到至少内存耗尽。100000没有那么大,但这取决于这些任务做什么。虽然JVM堆空间是最终因素,但在OpenJDK中,队列中可运行的文件数不能超过Integer.max_INT。对于大多数实际应用而言,这并不重要,但在某些应用中,这一硬限制也是一个因素。