0

Java - webapp 通过 Executors 类执行线程作为以下代码的优势是什么,然后以固定池大小运行。

private ExecutorService threadRunner;
threadRunner = Executors.newFixedThreadPool(2);

threadRunner.submit(activeQueueRunner);
threadRunner.submit(standbyQueueRunner);
4

1 回答 1

2

线程包含许多创建成本高昂的支撑结构。执行器是创建一次的线程池,但包含在多个任务中重用所需的支持代码。

换句话说,如果您只向大小为 2 的新固定线程池提交两个项目,那么您没有任何优势。当您将第三个项目提交到threadRunner池中时,优势就出现了,因为它将绑定到已完成任务的 一个线程(activeQueueRunnerstandbyQueueRunner),并使用该线程来执行它的run(...)块。

如果您将提交的任务写成永远不会完成,那么它们基本上永远不会将线程释放回池中。因此,当使用Executor类型池时,创建大量快速轻量级任务并让池分摊在整个程序运行期间创建/销毁线程的昂贵成本是一个好主意。

于 2012-09-11T18:58:04.697 回答