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