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

Future模式实例的更多相关文章

  1. Java深入学习(4):Future模式

    Future模式: 其实相当于是前端的Ajax 比如我们使用多线程下载文件时候,每一个线程都会发送HTTP请求资源.而我如何知道,文件下载完毕呢? 也就是说,主线程如何获得子线程的执行结果呢? 创建多 ...

  2. Java多线程编程中Future模式的详解

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  3. java Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  4. 14.Java中的Future模式

    jdk1.7.0_79  本文实际上是对上文<13.ThreadPoolExecutor线程池之submit方法>的一个延续或者一个补充.在上文中提到的submit方法里出现了Future ...

  5. 彻底理解Java的Future模式

    先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...

  6. 并行设计模式(一)-- Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  7. 【并发编程】Future模式及JDK中的实现

    1.1.Future模式是什么 先简单举个例子介绍,当我们平时写一个函数,函数里的语句一行行同步执行,如果某一行执行很慢,程序就必须等待,直到执行结束才返回结果:但有时我们可能并不急着需要其中某行的执 ...

  8. 深入理解[Future模式]原理与技术

    1.Future模式 Future模式和多线程技术密切相关,可以说是利用多线程技术优化程序的一个实例. 在程序设计中,当某一段程序提交了一个请求,期望得到一个答复.但非常不幸的是,服务程序对这个请求的 ...

  9. 多线程系列之十:Future模式

    一,Future模式 假设有一个方法需要花费很长的时间才能获取运行结果.那么,与其一直等待结果,不如先拿一张 提货单.获取提货单并不耗费时间.这里提货单就称为Future角色获取Future角色的线程 ...

随机推荐

  1. 求重集的r-组合

    具体的就不在这里说了,如果有兴趣的可以把我的工程包下载下来看,留个URL http://pan.baidu.com/s/1bnes1HX

  2. oracle中直方图的使用

    本文从不绑定变量和绑定变量两种情况讨论直方图的作用 一.不绑定变量 SQL> create table test(name varchar2(10));表已创建.SQL> insert i ...

  3. iOS 解决TableView reloadData时cell中图片会闪的问题

    tableView调用reloaddata的时候发现有个小问题,每次刷新图片都会抖动闪烁一下,看着很难受,也影响体验.造成这个问题的主要原因是因为刷新时候切换图片导致.要解决这个问题也很好解决,使用S ...

  4. 关于ViewData,ViewBag,TempData三者学习记录!

    关于ViewData,ViewBag,TempData三者学习分享! 1.ViewData和TempData是字典类型,赋值方式用字典方式,ViewData["Key"] . 2. ...

  5. 基于日志处理的ElasticSearch的学(gen)习(feng)

    最近学了点solr,然后有听说了ElasticSearch,就想着也学一下ElasticSearch,然后看见了ElasticSearch用于日志的收集的分析,这里就来学习一下. 百度一下Elasti ...

  6. 查看tcp各个连接状态的数量

    4. 查看tcp各个连接状态的数量 下面对的 netstat -tan|awk '$1~/tcp/{aa[$NF]++}END{for (h in aa)print h,aa[h]}' SYN_SEN ...

  7. hdu 4902 Nice boat(线段树区间改动,输出终于序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 Problem Description There is an old country and ...

  8. IOS ARC内存管理,提高效率避免内存泄露

    本文转载至 http://blog.csdn.net/allison162004/article/details/38756263 Cocoa内存管理机制 (1)当你使用new.alloc.copy方 ...

  9. IT人和普洱茶

    IT人与普洱茶 作为一个平凡的IT人,在小孩眼中我就像黑客帝国的主角一样了不起:在亲戚眼中我是在写字楼做办公室吹空调的人:在朋友眼中我就是一个会写代码.掌握高科技术的人:在女友眼中我是一个在名企工作的 ...

  10. Pycharm 中错误ImportError: No module named appium

    Q: Pycharm 中错误ImportError: No module named appium A: Pycharm IDE Preferences -> Project Interpret ...