温馨提示×

温馨提示×

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

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

ExecutorService怎样提交任务

发布时间:2026-09-16 03:09:57 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 中,ExecutorService 是 java.util.concurrent 包提供的线程池接口,用来提交和管理任务。常见提交任务的方式有以下几种:


一、提交 Runnable 任务(无返回值)

ExecutorService executor = Executors.newFixedThreadPool(2);

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

特点:

  • 没有返回值
  • 无法获取任务执行结果
  • 异常会直接抛出到线程中

二、提交 Callable 任务(有返回值)

ExecutorService executor = Executors.newFixedThreadPool(2);

Future<String> future = executor.submit(() -> {
    return "任务结果";
});

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

特点:

  • 有返回值
  • 可通过 Future 获取结果或异常

三、提交多个任务(批量提交)

1. invokeAll(等待全部完成)

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

List<Future<String>> futures = executor.invokeAll(tasks);
  • 阻塞,直到所有任务完成
  • 返回所有 Future

2. invokeAny(任意一个完成即可)

String result = executor.invokeAny(tasks);
  • 只要有一个任务完成就返回结果
  • 其他任务会被取消

四、关闭 ExecutorService

任务提交后必须关闭线程池:

executor.shutdown(); // 不再接受新任务
// 或
executor.shutdownNow(); // 尝试中断正在执行的任务

五、execute vs submit 区别总结

方法 是否返回值 异常处理 使用场景
execute 否 线程级异常 简单异步任务
submit 是(Future) 可通过 Future 获取 需要结果或异常

如果你有具体使用场景(如定时任务、批量处理、Spring 环境等),我可以给你更合适的示例。

向AI问一下细节

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

AI
助
手