Java - webapp 通过 Executors 类执行线程作为以下代码的优势是什么,然后以固定池大小运行。
private ExecutorService threadRunner;
threadRunner = Executors.newFixedThreadPool(2);
threadRunner.submit(activeQueueRunner);
threadRunner.submit(standbyQueueRunner);
Java - webapp 通过 Executors 类执行线程作为以下代码的优势是什么,然后以固定池大小运行。
private ExecutorService threadRunner;
threadRunner = Executors.newFixedThreadPool(2);
threadRunner.submit(activeQueueRunner);
threadRunner.submit(standbyQueueRunner);
线程包含许多创建成本高昂的支撑结构。执行器是创建一次的线程池,但包含在多个任务中重用所需的支持代码。
换句话说,如果您只向大小为 2 的新固定线程池提交两个项目,那么您没有任何优势。当您将第三个项目提交到threadRunner
池中时,优势就出现了,因为它将绑定到已完成任务的 前一个线程(activeQueueRunner
或standbyQueueRunner
),并使用该线程来执行它的run(...)
块。
如果您将提交的任务写成永远不会完成,那么它们基本上永远不会将线程释放回池中。因此,当使用Executor
类型池时,创建大量快速轻量级任务并让池分摊在整个程序运行期间创建/销毁线程的昂贵成本是一个好主意。