Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多少可运行';是否可以将添加到固定/缓存线程池中的队列?_Java_Multithreading_Threadpool_Executorservice_Executor - Fatal编程技术网

Java 多少可运行';是否可以将添加到固定/缓存线程池中的队列?

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

在一个固定/缓存的线程池(比如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.OutOfMemoryError中出现异常:无法创建新的本机线程


错误消息。

假设您正在使用该方法,则限制为
Integer.MAX_INT
,至少在OpenJDK实现中是这样

此方法的OpenJDK 8实现创建了一个新的,默认为最大大小
Integer.max_INT


因此,默认固定线程池中的
可运行文件
的最大数量是
整数。MAX_INT
。但是,请注意,如果堆不够大,无法存储那么多
可运行文件
,则仍然会受到堆大小的限制。

没有单一答案,这取决于执行器的配置方式。I怀疑其中一个限制因素是RAM的数量。或者JVM的最大堆大小。它应该处理它们,直到至少内存耗尽。100000没有那么大,但这取决于这些任务做什么。虽然JVM堆空间是最终因素,但在OpenJDK中,队列中可运行的文件数不能超过Integer.max_INT。对于大多数实际应用而言,这并不重要,但在某些应用中,这一硬限制也是一个因素。