📜  ExecutorService接口(1)

📅  最后修改于: 2023-12-03 15:30:40.709000             🧑  作者: Mango

ExecutorService接口介绍

ExecutorService是Java中的一个接口,用于管理线程的执行。它提供了一些方法,可以创建和管理线程池,以及安排任务执行。

使用ExecutorService接口

使用ExecutorService接口,首先需要创建一个线程池。可以使用静态方法Executors.newFixedThreadPool(int nThreads)创建一个线程池:

ExecutorService executor = Executors.newFixedThreadPool(10);

这里创建的线程池可以同时运行10个线程。可以将任务提交到线程池中进行执行:

executor.submit(new Runnable() {
    @Override
    public void run() {
        // 执行任务
    }
});

这里将一个Runnable对象提交到线程池中进行执行。如果想获得任务的执行结果,可以使用带泛型的submit(Callable<T> task)方法。例如:

Future<String> future = executor.submit(new Callable<String>() {
    @Override
    public String call() throws Exception {
        // 执行任务,并返回结果
        return "result";
    }
});

这里将一个Callable对象提交到线程池中进行执行,并返回一个Future对象。可以通过Future对象获得任务执行的结果,例如:

String result = future.get();

这里会阻塞当前线程,直到任务执行完成并返回结果。

关闭ExecutorService

当不再需要使用ExecutorService时,需要将其关闭。可以使用shutdown()方法关闭线程池,该方法会等待所有任务执行完成后再关闭线程池:

executor.shutdown();

如果希望线程池立即关闭并停止所有任务,可以使用shutdownNow()方法:

executor.shutdownNow();
ExecutorService的实现类

ExecutorService接口有多个实现类,分别适用于不同的应用场景。

  • ThreadPoolExecutor:最常用的实现类,用于创建线程池。
  • ScheduledThreadPoolExecutor:用于创建可以调度延时任务或者周期性任务的线程池。
  • ForkJoinPool:用于并行计算。
总结

通过使用ExecutorService,可以方便地管理线程池和任务执行。在实际的开发中,经常需要使用到该接口,特别是对于需要异步执行任务的应用程序来说,更是必备的工具。