温馨提示×

温馨提示×

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

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

java Executor执行器的任务提交方式有哪些

发布时间:2025-04-05 18:48:40 来源:亿速云 阅读:131 作者:小樊 栏目:编程语言

Java Executor执行器(ExecutorService)提供了多种任务提交方式,主要包括以下几种:

1. execute(Runnable command)

  • 描述:用于提交一个不需要返回结果的任务。
  • 参数Runnable对象,表示要执行的任务。
  • 返回值:无返回值。
  • 示例
    executorService.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println("Task is running");
        }
    });
    

2. submit(Runnable task)

  • 描述:提交一个不需要返回结果的任务,但会返回一个Future对象,可以通过该对象检查任务是否完成。
  • 参数Runnable对象。
  • 返回值Future<Void>对象。
  • 示例
    Future<Void> future = executorService.submit(new Runnable() {
        @Override
        public void run() {
            System.out.println("Task is running");
        }
    });
    // 可以通过future.isDone()检查任务是否完成
    

3. submit(Callable<T> task)

  • 描述:提交一个有返回结果的任务,返回一个Future<T>对象,可以通过该对象获取任务的执行结果。
  • 参数Callable<T>对象,表示要执行的任务,可以返回一个结果。
  • 返回值Future<T>对象。
  • 示例
    Future<Integer> future = executorService.submit(new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {
            System.out.println("Task is running");
            return 42;
        }
    });
    // 可以通过future.get()获取任务的执行结果
    Integer result = future.get();
    

4. submit(Runnable task, T result)

  • 描述:提交一个不需要返回结果的任务,并指定任务完成后的结果。
  • 参数Runnable对象和任务完成后的结果。
  • 返回值Future<T>对象。
  • 示例
    Future<String> future = executorService.submit(new Runnable() {
        @Override
        public void run() {
            System.out.println("Task is running");
        }
    }, "Task completed");
    // 可以通过future.get()获取任务的结果
    String result = future.get();
    

5. invokeAll(Collection<? extends Callable<T>> tasks)

  • 描述:提交一组Callable任务,并返回一个Future列表,每个Future对应一个任务的执行结果。
  • 参数Collection<? extends Callable<T>>对象,表示要执行的任务集合。
  • 返回值List<Future<T>>对象,包含所有任务的执行结果。
  • 示例
    List<Callable<Integer>> tasks = Arrays.asList(
        new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                return 42;
            }
        },
        new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                return 24;
            }
        }
    );
    List<Future<Integer>> futures = executorService.invokeAll(tasks);
    for (Future<Integer> future : futures) {
        System.out.println(future.get());
    }
    

6. invokeAny(Collection<? extends Callable<T>> tasks)

  • 描述:提交一组Callable任务,并返回第一个成功完成的任务的结果。
  • 参数Collection<? extends Callable<T>>对象,表示要执行的任务集合。
  • 返回值:第一个成功完成的任务的执行结果。
  • 示例
    List<Callable<Integer>> tasks = Arrays.asList(
        new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                Thread.sleep(1000);
                return 42;
            }
        },
        new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                Thread.sleep(500);
                return 24;
            }
        }
    );
    try {
        Integer result = executorService.invokeAny(tasks);
        System.out.println(result);
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
    

这些方法提供了灵活的方式来提交不同类型的任务,并根据需要获取任务的执行结果或状态。

向AI问一下细节

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

AI