标签:String APiReal APi aPiReal queryStr 设计模式 public Future
Future设计模式说明
Future 模式有点类似于商品订单。比如在网购时,当看重某一件商品事,就可以提交
订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们发送 Ajax
请求的时候,页面是异步的进行后台处理,用户无须一直等待请求的结果,可以继续浏览或
操作其他内容。
代码实现
接口
public interface APi {
String getResult(String queryStr);
}
包装类
public class APiBz implements APi {
private APiReal aPiReal;
private boolean isReady;
@Override
public synchronized String getResult(String queryStr) {
while (!isReady){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return aPiReal.getResult(queryStr);
}
public synchronized void setAPiReal(APiReal aPiReal) {
if (isReady){
return;
}
this.aPiReal = aPiReal;
isReady = true;
notify();
}
}
真实数据
import java.util.concurrent.TimeUnit;
public class APiReal implements APi {
private String resutl;
public APiReal(String queryStr) {
System.out.println("开始根据" + queryStr + "进行耗时查询");
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("查询到结果");
this.resutl = "李四";
}
@Override
public String getResult(String queryStr) {
return this.resutl;
}
}
客户端
public class APiControler {
public APi getRequet(String queryStr){
APiBz bz = new APiBz();
new Thread(() ->{
APiReal aPiReal = new APiReal(queryStr);
bz.setAPiReal(aPiReal);
}).start();
return bz;
}
}
测试类
public class ApiTest {
public static void main(String[] args) {
APiControler controler = new APiControler();
APi lisi = controler.getRequet("lisi");
System.out.println("发送请求成功!");
System.out.println("=================\n开始干其他事情\n===================");
String kk = lisi.getResult("kk");
System.out.println("kk = " + kk);
}
}
标签:String,APiReal,APi,aPiReal,queryStr,设计模式,public,Future 来源: https://www.cnblogs.com/xzlf/p/14271397.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。