一、Future模式
如果在Client远程调用的时候,Server端需要大量的时间去处理,这时候Server段先返回一个mock的对象让访问完成,Client端并不处理这个数据,而且去执行其他的程序,直到请求返回。
代码如下
1、Main方法
public class Main {
public static void main(String[] args) {
Client client = new Client();
Data data = client.request("name");
System.out.println("request end");
try {
Thread.sleep(2000);
} catch (Exception e) {
}
System.out.println("real data" + data.getResult());
}
}
2、Client端
public class Client {
public Data request(final String string) {
final FuntureData future = new FuntureData();
new Thread() {
@Override
public void run() {
RealDate realData = new RealDate(string);
future.setRealData(realData);
}
}.start();
return future;
}
}
启动一个线程去调用,然后直接返回一个futrue对象。
3、接口
public interface Data {
public String getResult();
}
4、FuntureData
public class FuntureData implements Data {
protected RealDate realDate;
protected boolean isReady;
public synchronized void setRealData(RealDate realData) {
if (isReady) {
return;
}
this.realDate = realData;
isReady = true;
notifyAll();
}
@Override
public synchronized String getResult() {
while (!isReady) {
try {
wait();
} catch (Exception e) {
// TODO: handle exception
}
}
return realDate.getResult();
}
}
Funture 模式的核心。当返回后main使用getResult方法的时候,这个时候真实的数据没有没有完成,这个时候标志位是false。这个时候使用wait()方法。同时Client之前就调用set方法,这个时候如果真实数据加载完成就会把标志位设置为true。同时唤醒进程。所以最好返回的Result就是已经加载好的。
JDK的实现:
1、RealData
public class RealData implements Callable<String> {
private final String para;
public RealData(String para) {
this.para = para;
}
@Override
public String call() throws Exception {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 10; i++) {
sb.append(para);
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO: handle exception
}
}
return sb.toString();
}
}
实现Callable接口
2、Main
public class Main {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
FutureTask<String> future = new FutureTask<String>(new RealData("a"));
ExecutorService es = Executors.newFixedThreadPool(1);
es.submit(future);
System.out.println("request end");
try {
Thread.sleep(2000);
} catch (Exception e) {
}
System.out.println("real data" + future.get());
}
}
分享到:
相关推荐
Java程序性能优化 笔记 脑图
性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...
Java设计模式学习笔记
JAVA模式笔记,JAVA模式的读书笔记,JAVA模式的读书笔记。
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
根据《JAVA与设计模式》整理的笔记及示例代码。
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
韩顺平_Java设计模式笔记.docx
Java游戏编程读书笔记,Java游戏编程读书笔记
23中java设计模式结合生活中用例进行讲解以及spring源码中存在的设计模式才知道原来设计模式如此重要,视频教程链接如下:https://study.163.com/course/courseMain.htm?courseId=1209569921,或者直接在网易云搜索...
别下别下别下别下别下别下别下别下别下别下别下别下别下别下别下别下别下别下
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...
java笔记java笔记java笔记java笔记java笔记java笔记java笔记
设计模式1,包含了设计模式的基本介绍,以及状态机模式的读书笔记
Java相关课程系列笔记之十四Hibernate学习笔记(建议用WPS打开) Java相关课程系列笔记之十五Spring学习笔记(建议用WPS打开) Java相关课程系列笔记之十一Ajax学习笔记(建议用WPS打开) Java相关课程系列笔记之四...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
图解java设计模式_学习笔记_java开发解压密码为twj123
移动应用 UI 设计, 读书笔记, 记录摘取书籍中重点信息,有助于页面设计,原型设计等
java笔记java笔记,java笔记java笔记java笔记java笔记