📜  Java ExecutorService execute() 和 submit() 方法的区别(1)

📅  最后修改于: 2023-12-03 14:42:14.064000             🧑  作者: Mango

Java ExecutorService execute() 和 submit() 方法的区别

Java 通过 ExecutorService 接口提供了一个方便的线程池管理工具,其中 execute()submit() 是两个常用的方法。两者都可以用来将任务提交给线程池执行,但是它们之间有一些区别。本文就来介绍一下它们之间的区别。

execute() 方法

execute(Runnable command) 方法可以用来提交一个实现了 Runnable 接口的任务给线程池执行。该方法没有返回值,也没有办法知道任务是否执行成功。这个方法主要用于那些对任务的返回值不关心的情况下。

下面是一个例子:

public class Test {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);

        executor.execute(() -> {
            System.out.println("Hello World");
        });

        executor.shutdown();
    }
}
submit() 方法

submit(Runnable task)execute(Runnable command) 很相似,都是提交一个实现了 Runnable 接口的任务给线程池执行,但是 submit() 方法有返回值。返回值是一个 Future 对象,可以通过它来判断任务是否执行成功,并且可以获取任务返回的结果。

下面是一个例子:

public class Test {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);

        Future<?> future = executor.submit(() -> {
            System.out.println("Hello World");
            return "Hello Future";
        });

        try {
            String result = (String) future.get();
            System.out.println(result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }
}
总结

execute()submit() 方法都可以用来提交任务给线程池执行。如果对任务的返回值不关心,或者无法知道任务是否成功执行,那么就可以使用 execute() 方法。如果对任务的返回值感兴趣,那么就使用 submit() 方法。