Executors#newSingleThreadExecutor() 在引擎盖下创建 ThreadPoolExecutor 对象,
请参阅此处的代码:http://www.docjar.com/html/api/java/util/concurrent/Executors.java.html
133 public static ExecutorService newSingleThreadExecutor() {
134 return new FinalizableDelegatedExecutorService
135 (new ThreadPoolExecutor(1, 1,
136 0L, TimeUnit.MILLISECONDS,
137 new LinkedBlockingQueue<Runnable>()));
138 }
ThreadPoolExecutor的文档解释了它在哪些情况下具有优势:
线程池解决了两个不同的问题:由于减少了每个任务的调用开销,它们通常在执行大量异步任务时提供改进的性能,并且它们提供了一种限制和管理在执行一组任务时使用的资源(包括线程)的方法。每个 ThreadPoolExecutor 还维护一些基本的统计信息,例如已完成任务的数量。
如果您只需要偶尔运行一次单个线程(例如每小时一次),那么就性能而言,使用可能会更慢,因为您需要实例化整个机器(池+线程),然后将其从内存中丢弃。ThreadPoolExecutor
但是,如果您想经常使用这个单个线程(例如每15秒一次),那么优点是您只创建一次池和线程,将其保存在内存中,并一直使用它,从而节省时间,不时地创建新线程(如果要使用它,可能会非常昂贵,请说每15秒左右)。