java future
来源:互联网 发布:java设计模式有几种 编辑:程序博客网 时间:2024/06/06 01:29
Future模式Java实现
Future模式的图中客户端则无需等到可以做其他的事情。服务器段接收到请求后立即返回结果给客户端,这个结果并不是真实的结果(是虚拟的结果),也就是先获得一个假数据,然后执行其他操作
Client的实现
Client主要完成的功能包括:1. 返回一个FutureData;2.开启一个线程用于构造RealData。
public class Client {
public Data request(final String string) {
final FutureData futureData = new FutureData();
new Thread(new Runnable() {
@Override
public void run() {
//RealData的构建很慢,所以放在单独的线程中运行
RealData realData = new RealData(string);
futureData.setRealData(realData);
}
}).start();
return futureData; //先直接返回FutureData
}
}
Data的实现
无论是FutureData还是RealData都实现该接口。
public interface Data {
String getResult() throws InterruptedException;
}
FutureData的实现
FutureData是Future模式的关键,它实际上是真实数据RealData的代理,封装了获取RealData的等待过程。
//FutureData是Future模式的关键,它实际上是真实数据RealData的代理,封装了获取RealData的等待过程
public class FutureData implements Data {
RealData realData = null; //FutureData是RealData的封装
boolean isReady = false; //是否已经准备好
public synchronized void setRealData(RealData realData) {
if(isReady)
return;
this.realData = realData;
isReady = true;
notifyAll(); //RealData已经被注入到FutureData中了,通知getResult()方法
}
@Override
public synchronized String getResult() throws InterruptedException {
if(!isReady) {
wait(); //一直等到RealData注入到FutureData中
}
return realData.getResult();
}
}
RealData的实现
RealData是最终需要使用的数据,它的构造函数很慢。
public class RealData implements Data {
protected String data;
public RealData(String data) {
//利用sleep方法来表示RealData构造过程是非常缓慢的
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.data = data;
}
@Override
public String getResult() {
return data;
}
}
测试运行
主函数主要负责调用Client发起请求,并使用返回的数据。
public class Application {
public static void main(String[] args) throws InterruptedException {
Client client = new Client();
//这里会立即返回,因为获取的是FutureData,而非RealData
Data data = client.request("name");
//这里可以用一个sleep代替对其他业务逻辑的处理
//在处理这些业务逻辑过程中,RealData也正在创建,从而充分了利用等待时间
Thread.sleep(2000);
//使用真实数据
System.out.println("数据="+data.getResult());
}
}
0 0
- java Future
- Java --- Future
- java future
- java future
- Java Future接口、Future模式理解
- java Future 接口介绍
- java future模式
- 什么是java future模式
- Java Future接口简介
- JAVA Future类
- java callable和Future
- JAVA中的Future、ExecutorService
- Java Future模式
- 什么是java future模式
- 什么是java future模式
- java Future
- java.util.concurrent.Future
- Java Future/FutureTask
- output buffering vs string concatenation / ob vs 拼接字符串
- Hibernate学习笔记 查询简介
- 一些有用的小程序资料
- 【Awesome Power Mode】
- 记录phantomjs学习(二)
- java future
- 检测用户有无操作
- Scala中最常用数据结构Map和Tuple
- git学习
- 使用RecyclerView加载不出数据的原因可能有:
- CentOS 7.2 下安装 Docker 1.12.3 版的详细方法
- 网吧升级机房问题集
- LeetCode-399. Evaluate Division-思路详解-C++
- 解决微信小程序switchTab后tab不刷新