Java并发编程-7.异步请求Future模式

本文深入探讨了Java并发编程中的Future模式,解释了其如何避免主函数等待,通过返回契约实现异步处理。介绍了Future模式的基本流程、简单实现以及JDK中的Future接口和Callable的使用。详细讲解了Future的常用方法,如get()、isDone()、isCancelled()和cancel(),并给出了使用示例。
摘要由CSDN通过智能技术生成

Future模式

  • 核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑

  • Future模式不会立即返回你需要的数据,但是,他会返回一个契约 ,以后在使用到数据的时候就可以通过这个契约获取到需要的数据。

  • 串行程序调用流程
    在这里插入图片描述
    上图串行程序调用的流程,当有一个程序执行比较耗时的时候,其他程序必须等待该耗时操作的结束,这样客户端就必须一直等待返回结果后,才可以执行后续其他的任务

  • Future模式流程图
    在这里插入图片描述
    在Future模式中,虽然获取数据是一个耗时的操作,但是服务程序不会等数据请求完成后就立刻返回客户一个”契约“,于此同时呢,Future会通过另外一个Thread 去构造一个真正的资源,资源准备完毕之后,在给future一个通知。如果客户端急于获取这个真正的资源,那么就会阻塞客户端的其他所有线程,等待资源准备完毕。

Future模式的简单实现

  • 主要角色
参与者 作用
Client 客户端,请求入口
Data 返回数据的接口
FutureData Future数据(契约),虚拟数据,需要装配RealData
RealData 真实数据,获取数据比较耗时
  • 核心结果图
    在这里插入图片描述

代码实现

  • Data 数据返回接口
    public interface Data {
         
    	String getResult();
    }
    
  • FutureData 虚拟数据(契约)
    public class FutureData implements Data {
         
    
        private RealData realData = null;
        private boolean isReady = false;
    
        private ReentrantLock lock = new ReentrantLock();
        private Condition condition = lock.newCondition();
    
    
        @Override
        public String getResult() {
         
            //数据没有准备好,阻塞等待获取数据
            while (!isReady) {
         
                try {
         
                    lock.lock();
                    condition.await();
                } catch 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值