Future模式介绍及入门使用
FutureClient代码实现:
package com.hjf.future; public class FutureClient
{
/**
* 请求客户端
* @param queryStr
* @return
*/
public Data request(final String queryStr){
//1:创建一个代理对象(Data接口的实现类)先返回给发送请求的客户端,告诉他请求已经接收到,可以做其他的事情
final FutureData fd = new FutureData();
//2:启动一个新的线程,去加载真实的数据,传递给这个代理对象
new Thread(new Runnable()
{
@Override
public void run()
{
//3:这个新的线程可以去后台加载真实的数据
RealDate rd = new RealDate(queryStr);
//4:传递给代理对象
fd.setRealData(rd);
}
}).start();
//5:返回代理对象
return fd;
}
}
FutureData代码及实现:
package com.hjf.future; public class FutureData implements Data
{
/*真实数据*/
private RealDate realData; /*是否加载完成的控制器*/
private boolean isready = false; /**
* 装载真实的数据
* @param realData
*/
public synchronized void setRealData(RealDate realData)
{
//realData已经装载到FutureData中了,直接返回
if(isready){
return;
}
this.realData = realData;//装载数据
isready = true;//修改控制器
notify();
} /**
* 获取请求的最终结果
*/
@Override
public synchronized String getRequest()
{
//未加载数据的情况下保持等待 等待状态真实数据完成
while(!isready){
try
{
wait();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
//装载完成时获取数据即可
return this.realData.getRequest();
} }
RealData代码及实现:
package com.hjf.future; public class RealDate implements Data
{
/*查询结果*/
private String result; public RealDate(String queryStr){
System.out.println("根据 "+queryStr+" 进行查询,这是一个很耗时的操作..");
try
{
//模拟真实的情况
Thread.sleep(5000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("操作完毕,获取数据");
this.result = "查询结果";
} /**
* 获取真实的请求数据
* @return
*/
@Override
public String getRequest()
{
return result;
}
}
Data接口代码:
package com.hjf.future; public interface Data
{
String getRequest();
}
测试类代码:
package com.hjf.future; public class Main
{
public static void main(String[] args)
{
FutureClient fc = new FutureClient();
Data data = fc.request("请求参数");
System.out.println("请求发送成功"); System.out.println("做其他的事情..."); String result = data.getRequest();
System.out.println(result);
}
}
Future模式介绍及入门使用的更多相关文章
- Future 模式介绍
假设一个任务执行需要花费一些时间,为了省去不必要的等待时间,可以先获取一个提货单,即future,然后继续处理别的任务,知道货物到达,即任务完成得到结果,此时可以使用提货单提货,即通过future得到 ...
- jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...
- [转帖]Druid介绍及入门
Druid介绍及入门 2018-09-19 19:38:36 拿着核武器的程序员 阅读数 22552更多 分类专栏: Druid 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议 ...
- java Future 接口介绍
(转自:http://blog.csdn.net/yangyan19870319/article/details/6093481) 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java ...
- Future模式
Future模式简介 Future模式有点类似于网上购物,在你购买商品,订单生效之后,你可以去做自己的事情,等待商家通过快递给你送货上门.Future模式就是,当某一程序提交请求,期望得到一个答复.但 ...
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...
- 【并发编程】Future模式及JDK中的实现
1.1.Future模式是什么 先简单举个例子介绍,当我们平时写一个函数,函数里的语句一行行同步执行,如果某一行执行很慢,程序就必须等待,直到执行结束才返回结果:但有时我们可能并不急着需要其中某行的执 ...
- 并发模型(一)——Future模式
多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future.Master-Worker.Guard Susperionsion.不变.生产者-消费者 模式: jdk除了定义了若干并发 ...
- 多线程设计模式 - Future模式之JAVA原生实现
在之前一篇博客中介绍了Future设计模式的设计思想以及具体实现,今天我们来讲一下使用JDK原生的包如何实现. JDK内置的Future主要使用到了Callable接口和FutureTask类. Ca ...
随机推荐
- python 回调函数,最简单的例子
回调的英文定义: A callback is a function that is passed as an argument to another function and is executed ...
- js 比大小
html部分 <input type="button" onclick="mymax(5,4,12)" value="按钮"/> ...
- vs2017 exe在Linux上运行
1:将vs .netcore控制台项目发布打包(比如文件名为:demo2core.zip,以下会用到) 2:使用XShell软件连接Linux a.在linux上使用命令 id addr找出ip地址 ...
- nginx配置优化 第二章
一:常用功能优化: 1:网络连接的优化: 只能在events模块设置,用于防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的ngi ...
- Python 用户交互程序Input
1.用户交互,用户输入 用户输出命令是input. 设置一个变量并输出. name = input("name:") print(name) 注:python2 下 raw_inp ...
- 在线视频下载利器——youtube-dl
youtube-dl是谷歌出品的在线视频下载利器,可以用来下载youtube视频(前提是你得能上youtube). 使用方法很简单,只需要在cmd下执行youtube-de.exe +视频页面网址,程 ...
- JS(JavaScript)的初了解(更新中···)
1.js介绍 Js全称叫javascript,但不是java,他不仅是是一门前台语言,经过发展,现在也是一门后台语言:而java是后台语言. Js作者是布兰登艾奇. 前台语言:运行在客户端的 后台语言 ...
- 输出JSON
<?php header("Content-type: text/html; charset=utf-8"); $host = '数据库IP'; $dbname = '数据库 ...
- SpringBoot HttpServletResponse Header Cookie输出问题
问题: 在一次Response写入header和cookie的时候,发现部分信息没有被输出 工具类: CookieUtils: import java.io.IOException; import j ...
- 【四】jquery之文档处理习题(内部处理、外部处理)[移动节点]
参考资料:http://jquery.cuishifeng.cn/index.html 代码: <!DOCTYPE html> <html> <head> < ...