zoukankan      html  css  js  c++  java
  • Future 设计模式

    Future设计模式说明

    Future 模式有点类似于商品订单。比如在网购时,当看重某一件商品事,就可以提交
    订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们发送 Ajax
    请求的时候,页面是异步的进行后台处理,用户无须一直等待请求的结果,可以继续浏览或
    操作其他内容。

    代码实现

    接口

    public interface APi {
        String getResult(String queryStr);
    }
    

    包装类

    public class APiBz implements APi {
    
        private APiReal aPiReal;
        private boolean isReady;
    
        @Override
        public synchronized String getResult(String queryStr) {
            while (!isReady){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
            return aPiReal.getResult(queryStr);
        }
    
        public synchronized void setAPiReal(APiReal aPiReal) {
            if (isReady){
                return;
            }
            this.aPiReal = aPiReal;
            isReady = true;
            notify();
        }
    }
    

    真实数据

    import java.util.concurrent.TimeUnit;
    
    public class APiReal implements APi {
    
        private  String resutl;
        public APiReal(String queryStr) {
            System.out.println("开始根据" + queryStr + "进行耗时查询");
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("查询到结果");
            this.resutl = "李四";
        }
    
        @Override
        public String getResult(String queryStr) {
            return this.resutl;
        }
    }
    

    客户端

    public class APiControler {
    
        public APi getRequet(String queryStr){
            APiBz bz = new APiBz();
            new Thread(() ->{
                APiReal aPiReal = new APiReal(queryStr);
                bz.setAPiReal(aPiReal);
            }).start();
            return bz;
        }
    }
    

    测试类

    public class ApiTest {
        public static void main(String[] args) {
            APiControler controler = new APiControler();
            APi lisi = controler.getRequet("lisi");
            System.out.println("发送请求成功!");
            System.out.println("=================
    开始干其他事情
    ===================");
            String kk = lisi.getResult("kk");
            System.out.println("kk = " + kk);
        }
    }
    
    重视基础,才能走的更远。
  • 相关阅读:
    转载一篇文章 python程序员经常犯的10个错误
    外部表与partition
    grpc 入门(二)-- 服务接口类型
    用例图简介(转)
    UML类图(Class Diagram)中类与类之间的关系及表示方式(转)
    快速搭建fabric-v1.1.0的chaincode开发环境
    ubuntu networking 与 network-manager
    [转]bashrc与profile区别
    超矩链--基于矩阵的分布式账本
    adb 在windows7中的使用
  • 原文地址:https://www.cnblogs.com/xzlf/p/14271397.html
Copyright © 2011-2022 走看看