温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java ExecutorService怎样提交任务

发布时间:2026-10-06 20:12:09 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

在 Java 中,ExecutorService 是 java.util.concurrent 包提供的线程池接口,用来提交和执行任务。提交任务主要有以下几种方式和对应方法。


一、常见提交任务的方法

1. execute(Runnable) —— 无返回值

用于提交 不需要返回结果 的任务。

ExecutorService executor = Executors.newFixedThreadPool(2);

executor.execute(() -> {
    System.out.println("任务执行中");
});

特点:

  • 只接受 Runnable
  • 无法获取执行结果
  • 无法感知任务是否抛异常(异常会直接打印)

2. submit(Runnable) —— 有 Future,但结果为 null

Future<?> future = executor.submit(() -> {
    System.out.println("Runnable 任务");
});
  • 可通过 future.get() 判断是否执行完成
  • get() 返回 null

3. submit(Callable<T>) —— 有返回值(最常用)

用于需要返回结果的任务。

Callable<String> task = () -> {
    return "任务结果";
};

Future<String> future = executor.submit(task);

String result = future.get(); // 阻塞等待结果

4. submit(Runnable, T result) —— 自定义返回结果

Future<String> future = executor.submit(() -> {
    System.out.println("执行任务");
}, "完成");

String result = future.get(); // 返回 "完成"

二、批量提交任务

invokeAll(等待所有任务完成)

List<Callable<String>> tasks = List.of(
    () -> "任务1",
    () -> "任务2"
);

List<Future<String>> futures = executor.invokeAll(tasks);

invokeAny(只要有一个完成就返回)

String result = executor.invokeAny(tasks);

三、获取任务结果(Future)

Future<String> future = executor.submit(() -> "结果");

try {
    String r = future.get(); // 阻塞
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

四、关闭线程池(很重要)

executor.shutdown(); // 等待已有任务执行完
// executor.shutdownNow(); // 立即中断

五、完整示例

ExecutorService executor = Executors.newFixedThreadPool(2);

Future<Integer> future = executor.submit(() -> {
    Thread.sleep(1000);
    return 10;
});

System.out.println(future.get());

executor.shutdown();

总结

方法 是否返回值 适用场景
execute 否 简单异步任务
submit(Runnable) 否 需要感知完成
submit(Callable) 是 需要结果
invokeAll / invokeAny 是 批量任务

如果你愿意,我也可以讲 线程池参数配置 或 Spring 中如何使用线程池。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手