• Future模式实例


    Future模式

    /**
     * qccr.com Inc.
     * Copyright (c) 2014-2016 All Rights Reserved.
     */
    package com.youqianhuan.future;
    
    /**
     * 数据处理接口
     * @author chenghuanhuan@qccr.com
     * @since $Revision:1.0.0, $Date: 2017年03月05日 上午9:54 $
     */
    public interface Data {
    
        /**
         * 获取请求数据
         * @return
         */
        Object getReuqestData();
    }
    /**
     * qccr.com Inc.
     * Copyright (c) 2014-2016 All Rights Reserved.
     */
    package com.youqianhuan.future;
    
    /**
     * @author chenghuanhuan@qccr.com
     * @since $Revision:1.0.0, $Date: 2017年03月05日 上午9:58 $
     */
    public class RealData implements Data {
    
        // 处理结果
        private Object result;
    
    
        public RealData(String request){
            // 处理真实逻辑
            System.out.println("处理真实逻辑!");
            execute(request);
        }
    
    
        public Object getReuqestData() {
            return result;
        }
    
        public void execute(String data){
    
            System.out.println("处理中....1");
            try {
                Thread.sleep(1000);
                System.out.println("处理中....2");
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            result = data;
        }
    }
    /**
     * qccr.com Inc.
     * Copyright (c) 2014-2016 All Rights Reserved.
     */
    package com.youqianhuan.future;
    
    /**
     * @author chenghuanhuan@qccr.com
     * @since $Revision:1.0.0, $Date: 2017年03月05日 上午9:56 $
     */
    public class FutureData implements Data {
    
        private RealData realData;
    
        private boolean isReady = false;
    
        /**
         * 设置真实的处理类
         * @param realData
         */
        public synchronized void setRealData(RealData realData){
            if (isReady){
                return;
            }
            this.realData = realData;
            isReady = true;
    
            // 进行通知
            notify();
        }
    
        /**
         * 获取处理结果
         * @return
         */
        public synchronized Object getReuqestData() {
    
            while (!isReady){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
    
            return this.realData.getReuqestData();
        }
    }
    /**
     * qccr.com Inc.
     * Copyright (c) 2014-2016 All Rights Reserved.
     */
    package com.youqianhuan.future;
    
    /**
     * 处理客户端
     * @author chenghuanhuan@qccr.com
     * @since $Revision:1.0.0, $Date: 2017年03月05日 上午9:52 $
     */
    public class FutureClient {
        public static Data reuquest(final String request){
            final FutureData futureData = new FutureData();
    
            new Thread(new Runnable() {
                public void run() {
                    RealData realData = new RealData(request);
                    futureData.setRealData(realData);
                }
            }).start();
    
            return futureData;
        }
    }
    /**
     * qccr.com Inc.
     * Copyright (c) 2014-2016 All Rights Reserved.
     */
    package com.youqianhuan.future;
    
    /**
     * @author chenghuanhuan@qccr.com
     * @since $Revision:1.0.0, $Date: 2017年03月05日 上午10:17 $
     */
    public class Main {
        public static void main(String[] args) {
    
            Data futureData = FutureClient.reuquest("hahhahah");
    
            System.out.println(futureData.getReuqestData());
    
        }
    }
  • 相关阅读:
    sql总结:
    VS2008生成DLL文件的方法、引用dll文件以及意义
    Mysql日期和时间函数
    删除文件后硬盘可用空间为何不增加?
    C# CheckedListBox控件的用法
    SNMP监控一些常用OID的总结
    解决 MariaDB无密码就可以登录的问题
    Cisco路由器用SSH替代Telnet连接
    思科、华为、H3C常用命令对比大全
    转载:关于思科交换机、路由器如何关闭telnet 开启ssh服务
  • 原文地址:https://www.cnblogs.com/smile361/p/6504518.html
Copyright © 2020-2023  润新知