1、数据接口层:

package multithread;

public interface Data2 {

public abstract String getContent();
}

2、真实数据层:

package multithread;

public class RealData implements Data2{

private final String content;

public RealData(int count,char c){
   System.out.println(" making realdata("+count+","+c+") begin");
   char buffer[] = new char[count];
   for(int i=0;i<count;i++){
    buffer[i] = c;
    try {
     Thread.sleep(100);
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  
   System.out.println(" making realdata("+count+","+c+") end");
   this.content = new String(buffer);
}
public String getContent(){
   return content;
}
}

3、虚拟数据层(提货单):

package multithread;

/**
* @author Administrator
*提货单
*/
public class FutureData implements Data2{

private RealData realdata = null;
private boolean ready = false;

public synchronized String getContent(){
   while(!ready){
    try {
     wait();
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  
   return realdata.getContent();
}

public synchronized void setRealData(RealData realdata){
   if(ready)
    return ;
   this.realdata = realdata;
   this.ready = true;
   notifyAll();
}
}

4、处理数据层:

package multithread;

public class Host2 {

public Data2 request(final int count,final char c){
   System.out.println(Thread.currentThread().getName()+" ....");
   System.out.println(" request("+count+", "+c+") begin");
   final FutureData future = new FutureData();
   //System.out.println(future.toString());
   new Thread(){
    public void run(){
     RealData realdata = new RealData(count ,c);
     future.setRealData(realdata);
    }
   }.start();
  
   System.out.println(" request("+count+", "+c+") end");
   return future;
}
}

5、测试类:

package multithread;

public class Main5 {

public static void main(String args[]){
   System.out.println("main begin");
   Host2 host = new Host2();
   Data2 data1 = host.request(10, 'A');
   Data2 data2 = host.request(20, 'B');
   Data2 data3 = host.request(30, 'C');
  
   System.out.println("main otherjob begin");
  
   try {
    Thread.sleep(2000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   System.out.println("main otherjob end");
  
   System.out.println("data1="+data1.getContent());
   System.out.println("data2="+data2.getContent());
   System.out.println("data3="+data3.getContent());
  
   System.out.println("main end");
}
}

转载于:https://www.cnblogs.com/xinzhuangzi/archive/2010/08/18/4100552.html

java future设计模式相关推荐

  1. Java高并发编程详解系列-Future设计模式

    导语   假设,在一个使用场景中有一个任务需要执行比较长的时间,通常需要等待任务执行结束之后或者是中途出错之后才能返回结果.在这个期间调用者只能等待,对于这个结果Future设计模式提供了一种凭据式的 ...

  2. Java 经典设计模式-- 05.并发型模式

    前言 书接上文,终于来到了设计模式篇最硬核的并发设计模式介绍篇了,上一篇中对 Java 8 的行为模式中的常用设计模式做了介绍与分析,本篇将对 Java 8 的并发模式中的常用模式做介绍与分析,为了为 ...

  3. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  4. java策略设计模式_Java中的策略设计模式

    java策略设计模式 策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设 ...

  5. java观察者设计模式_Java中的观察者设计模式

    java观察者设计模式 在本教程中,我们将讨论Observer设计模式. 观察者模式有两个主要方面- 主题和观察者 . 当我们的系统有多个对象(称为观察者)时 ,将使用一个模式,即依赖于一个特定对象( ...

  6. java 模板方法设计模式_Java中的模板方法设计模式

    java 模板方法设计模式 模板方法是一种行为设计模式 ,用于创建方法存根并将某些实现步骤推迟到子类. 模板方法定义了执行算法的步骤,它可以提供默认实现,该实现对于所有或某些子类可能是通用的. 让我们 ...

  7. java 生成器 设计模式_Java中的生成器设计模式

    java 生成器 设计模式 Java 中的 Builder设计模式是一种创建模式,即用于创建对象,类似于 工厂方法设计模式 ,这也是创建设计模式. 在学习任何设计模式之前,我建议先找出特定设计模式要解 ...

  8. java设计模式之道文字版,Java Web设计模式之道 PDF

    资源名称:Java Web设计模式之道 PDF 第一部分 仙人指路--设计模式简介 第1章 设计模式概述 1.1 设计模式是什么 1.2 软件设计模式的发展历程 1.3 作者阐述软件设计模式的主要方式 ...

  9. Java代理设计模式(Proxy)的具体实现:静态代理和动态代理

    Java代理设计模式(Proxy)的具体实现:静态代理和动态代理 实现方式一:静态代理 静态代理方式的优点 静态代理方式的缺点 Java动态代理实现方式一:InvocationHandler Java ...

最新文章

  1. 带头节点单链表的增删改查
  2. [组图]海报:计算机的爱
  3. 反思O2O演化的三个时代,大数据与智能化才是未来所在
  4. 在未启动程序情况 点击视图设计器 弹出未将对象引用窗体的解决方案
  5. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp预处理超集
  6. java 接口的观察者模式_java观察者模式
  7. 合成资产平台Public Mint与跨链资产协议Knit Finance达成合作
  8. VisualStudioCode常用快捷键
  9. 错误与异常_1-5选择题
  10. mongoVUE对mongodb常用的基础操作
  11. H3CSE路由-BGP属性
  12. 人工智能自然语言处理技术处理专业领域的运用
  13. Bookmarks 各种技术 参考
  14. AcWing 790 数的三次方根
  15. 国密SM2椭圆曲线密码算法
  16. java枚举值转化中文_多个枚举的国际化(枚举值的转换)
  17. vue实现关注与取消关注的按钮
  18. 抖音小程序实践二:常用权限申请
  19. Centos 7 利用LVM实现动态扩容(1)
  20. open_source_team

热门文章

  1. insert数据时,获取插入数据的id
  2. 包头昆区多大面积_两套楼房,放了整整19车垃圾!包头这对母女的“特殊癖好”,让邻居彻底不能忍了.........
  3. java实现zip与unzip
  4. c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt
  5. CTF web总结--利用mysql日志getshell
  6. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
  7. EF架构~为EF DbContext生成的实体添加注释(T4模板应用)
  8. oralce 表空间解锁
  9. hdu2716水水哈希
  10. 惨!重新申请了网页的Counter