每次我们执行多次提交操作时,我是否正确:
ExecutorService executor = Executors.newSingleThreadExecutor(
new MyThreadFactory("someExecutor"));
executor.submit(...);
executor.submit(...);
executor.submit(...);
方法java.util.concurrent.ThreadFactory#newThread
只执行一次?或者它每次执行并为每个提交调用创建一个新线程?
答案 0 :(得分:1)
答案 1 :(得分:1)
当您查看Executors代码时,您会看到它创建了ThreadPoolExecutor,其核心和最大线程设置为“1”并将活动时间保持为0:
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory));
}
keep alive仅监视是否存在更多核心线程,这在此情况从未如此,因为核心为1且max也为1.新线程将仅创建一次并保持活动状态,直到您通过以下方式关闭执行程序shutdown
或shutdownNow
方法。
从ThreadPoolExecutor
辅助方法创建Executor
的简写方法没有任何魔力,只需检查那里的代码:)