Executors.newSingleThreadExecutor()
是 Java 中 java.util.concurrent
包提供的一个工厂方法,它创建并返回一个 ExecutorService
实例,这个实例可以管理一个单一的后台线程来执行任务。
当你使用 newSingleThreadExecutor()
方法时,你得到了一个执行服务(ExecutorService),它有以下特征:
单线程:创建的执行服务内部有一个线程。所有提交给它的任务将会序列化执行,也就是说,它会在单个线程上依次执行任务,不会有并发执行的情况发生。
任务队列:如果有多个任务提交给这个执行器,除了当前正在执行的任务外,其他任务将会在一个无界队列中等待,直到线程可用。
处理任务失败:如果执行中的线程由于任务抛出异常而终止,执行服务会安排一个新的线程来替换它,以继续执行后续的任务。
使用 newSingleThreadExecutor
非常适合需要顺序执行的任务,并且要求任务之间不受并发问题影响的场景。例如,在一个GUI应用程序中,你可能会使用它来执行一些不应并发运行的长时间操作,以避免创建多线程造成的复杂性。
请注意,创建的 ExecutorService
应该显式地关闭,调用 shutdown()
或 shutdownNow()
方法,以释放系统资源,否则可能导致线程的长时间生存,从而造成内存泄漏。
下面是一个简单的例子,显示了如何使用 newSingleThreadExecutor()
:
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
public void run() {
// 任务代码
System.out.println("执行任务在: " + Thread.currentThread().getName());
}
});
executorService.shutdown(); // 当不再提交任务时,应关闭ExecutorService