异步计算接口Future

异步计算接口Future

概述

 Future是一个表示异步计算结果的接口。提供一个检查计算是否完成的方法,以及等待计算完成并检索其结果的方法 在Java并发包中,Future提供一个取消计算 查询是否完成以及获取计算结果的框架,但是原生Future只提供阻塞操作来获取结果 这在一些场景不够灵活

主要方法

  • cancel(boolean mayInterruptIfRunning),参数用于指示是否取消正在执行的任务,如果任务成功取消 返回true
  • isCancelled() 如果任务在完成前被取消 返回true
  • isDone() 如果任务完成了 无论是正常完成 异常还是取消 返回true
  • get 等待计算完成 然后检索其结果
  • get(long timeout,TimeUnit unit) 如果必要最多等待给定的时间来获取计算结果 然后检索结果

使用场景

  • 执行长时间运行的计算任务,不希望阻塞主线程。
  • 当你需要执行多个并行任务,并在它们全部完成后进行下一步操作。
  • 管理一些需要长时间等待的异步操作,如网络请求、文件I/O等

实例代码

  • ExecutorService 提交了一个Callable任务,该任务简单休眠2s,然后返回一个证书 通过Future.get方法 我们可以获取这个异步任务的结果,需要注意,get方法会阻塞调用线程直到任务完成,因此如果异步任务执行很长时间,可能会影响程序的响应性,可以通过(long timeout,TimeUnnit unit)方法设置最大等待时间来避免这种情况
  • Future接口是Java并发包中处理异步计算的一个基本工具。通过使用Future和ExecutorService,可以简化异步任务的执行和管理,使得程序能够更加高效地利用系统资源,同时提高用户体验。

import java.util.concurrent.*;

public class FutureExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newCachedThreadPool();
        Future<Integer> future = executor.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                // 模拟长时间运算
                TimeUnit.SECONDS.sleep(2);
                return 123;
            }
        });

        // 做一些其他的事情
        System.out.println("执行其他任务...");

        // 获取异步计算的结果,如果未完成会阻塞等待
        Integer result = future.get();
        System.out.println("异步计算结果: " + result);
        
        executor.shutdown();
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值