Future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用。
请求数据---继续浏览其他内容----数据返回(返回时间不确定)----数据处理
以空间换取时间
如上图所示------》Future模式流程大概为: 客户端Future先发送请求-------》开启线程,发送真正请求------》立即得到一个返回对象FutureData(FutureData中真实数据为空)--------》子线程处理请求完毕,返回真实数据对象RealData----------》将realData对象放到FutureData中--------------》主线程获得真实数据对象RealData
大致实现:
public class Main {
public static void main(String[] args) {
FutureClient client = new FutureClient();
Data data = client.request("enenn");
System.out.println("main continue.....");
System.out.println("main resume.....");
System.out.println(data.getResult());
}
}
public class FutureClient {
public FutureData request(String query){
final FutureData data = new FutureData();
new Thread(new Runnable(){
@Override
public void run() {
RealData rd = new RealData();
data.setRd(rd);
}}).start();
return data;
}
}
public interface Data {
public String getResult();
}
public class FutureData implements Data {
private RealData rd;
private boolean isReady = false;
public synchronized String getResult() {
while(!isReady){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return rd.getResult();
}
public synchronized void setRd(RealData rd) {
if(isReady){
return;
}
this.rd = rd;
isReady = true;
notify();
}
}
public class RealData implements Data{
private String data = null;
public RealData(){
data = "real data";
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String getResult() {
return data;
}
}