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()); } }