Executors.newSingleThreadExecutor()

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