java future设计模式
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设计模式相关推荐
- Java高并发编程详解系列-Future设计模式
导语 假设,在一个使用场景中有一个任务需要执行比较长的时间,通常需要等待任务执行结束之后或者是中途出错之后才能返回结果.在这个期间调用者只能等待,对于这个结果Future设计模式提供了一种凭据式的 ...
- Java 经典设计模式-- 05.并发型模式
前言 书接上文,终于来到了设计模式篇最硬核的并发设计模式介绍篇了,上一篇中对 Java 8 的行为模式中的常用设计模式做了介绍与分析,本篇将对 Java 8 的并发模式中的常用模式做介绍与分析,为了为 ...
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- java策略设计模式_Java中的策略设计模式
java策略设计模式 策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设 ...
- java观察者设计模式_Java中的观察者设计模式
java观察者设计模式 在本教程中,我们将讨论Observer设计模式. 观察者模式有两个主要方面- 主题和观察者 . 当我们的系统有多个对象(称为观察者)时 ,将使用一个模式,即依赖于一个特定对象( ...
- java 模板方法设计模式_Java中的模板方法设计模式
java 模板方法设计模式 模板方法是一种行为设计模式 ,用于创建方法存根并将某些实现步骤推迟到子类. 模板方法定义了执行算法的步骤,它可以提供默认实现,该实现对于所有或某些子类可能是通用的. 让我们 ...
- java 生成器 设计模式_Java中的生成器设计模式
java 生成器 设计模式 Java 中的 Builder设计模式是一种创建模式,即用于创建对象,类似于 工厂方法设计模式 ,这也是创建设计模式. 在学习任何设计模式之前,我建议先找出特定设计模式要解 ...
- java设计模式之道文字版,Java Web设计模式之道 PDF
资源名称:Java Web设计模式之道 PDF 第一部分 仙人指路--设计模式简介 第1章 设计模式概述 1.1 设计模式是什么 1.2 软件设计模式的发展历程 1.3 作者阐述软件设计模式的主要方式 ...
- Java代理设计模式(Proxy)的具体实现:静态代理和动态代理
Java代理设计模式(Proxy)的具体实现:静态代理和动态代理 实现方式一:静态代理 静态代理方式的优点 静态代理方式的缺点 Java动态代理实现方式一:InvocationHandler Java ...
最新文章
- 带头节点单链表的增删改查
- [组图]海报:计算机的爱
- 反思O2O演化的三个时代,大数据与智能化才是未来所在
- 在未启动程序情况 点击视图设计器 弹出未将对象引用窗体的解决方案
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp预处理超集
- java 接口的观察者模式_java观察者模式
- 合成资产平台Public Mint与跨链资产协议Knit Finance达成合作
- VisualStudioCode常用快捷键
- 错误与异常_1-5选择题
- mongoVUE对mongodb常用的基础操作
- H3CSE路由-BGP属性
- 人工智能自然语言处理技术处理专业领域的运用
- Bookmarks 各种技术 参考
- AcWing 790 数的三次方根
- 国密SM2椭圆曲线密码算法
- java枚举值转化中文_多个枚举的国际化(枚举值的转换)
- vue实现关注与取消关注的按钮
- 抖音小程序实践二:常用权限申请
- Centos 7 利用LVM实现动态扩容(1)
- open_source_team
热门文章
- insert数据时,获取插入数据的id
- 包头昆区多大面积_两套楼房,放了整整19车垃圾!包头这对母女的“特殊癖好”,让邻居彻底不能忍了.........
- java实现zip与unzip
- c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt
- CTF web总结--利用mysql日志getshell
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
- EF架构~为EF DbContext生成的实体添加注释(T4模板应用)
- oralce 表空间解锁
- hdu2716水水哈希
- 惨!重新申请了网页的Counter