多线程常用设计----Future模式
通过异步调用方式:服务程序不等数据处理完成便立刻返回给客户端一个伪装的数据,客户端拿到这个结果后,不急于进行处理,而去调用了其他的业务处理逻辑,充分利用等待时间,处理完其他的业务逻辑之后,在处理返回结果比较慢的future数据进行处理。整个过程调用中不存在无谓的等待,从而提高了系统的响应速度。
这个在android手机开发中太常用了。
jdk内置的future模式功能强大,除了基本功能外,他还可以取消future任务,或者设置future任务的超时时间,很强。
jdk:
FutureTask future = new FutureTask《String》(new RealData("aaa"));
//RealData implements Callable 接口
ExecutorService ex = Executors.newFixedThreadPool(1);
ex.submit(future);
// 处理其他的
String reult = future.get();// 获取真实的处理结果。
简单实现代码段:
public class A {
public Data request(final String params) {
final FutureData future = new FutureData();
new Thread(){
public void run(){
RealData dd = new RealData();
future.setRealData(dd);
}
}.start();
returen future;
}
public class FutureData implements Daata{
protected Data realData = null;
protected boolean iReady = false;
public synchronized void setRealData(Data data){
if(iReady){
return;
}
this.realData = data;
iReady = true;
notifyAll();
}
public synchronized String getResult(){
while(!iReady){
try{
wait();
}catch(Exception ex){}
}
return data.getReult();
}
}
}