我试图了解Java FixedThreadPool在实践中的工作原理,但文档不回答我的问题。
假设一个简单的场景,如:
ExecutorService ES= Executors.newFixedThreadPool(3);
List FL;
for(int i=1;i<=200;i++){
FL.add(ES.submit(new Task()));
}
ES.shutdown();
其中Task是一个Callable,它构造一些资源,使用它们,并返回一些输出。
我的问题:在完成for循环时有多少任务在内存中?换句话说:一次建一个资源的时候只有3个任务,还是全部都是先创建的,这样在提交之后,我有200个任务(和他们的资源)等待执行?
注意:资源构造发生在Task的构造函数中,而不是在call()方法中。
在javadoc中(可以随意跳过以下内容):令我困惑的是Java文档中的以下说明
Creates a thread pool that reuses a fixed number of threads operating
off a shared unbounded queue. At any point, at most nThreads threads
will be active processing tasks.
我想这意味着,在我的例子中,所有的200任务都在队列中,但只有3个被执行。
任何帮助是非常感谢。