}
public class FutureData implements Data { private RealData realData; private boolean isReady = false; public synchronized void setRealData(RealData realData){ 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(); } }public class RealData implements Data{ private String result; public RealData(String queryStr){ System.out.println("根据"+queryStr+"进行查询,这是一个耗时操作.."); try{ Thread.sleep(5000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("加载完毕,获取结果"); result = "获取结果"; } @Override public String getRequest() { return result; } } public class FutureClient { public Data request(final String queryStr){ final FutureData futureData = new FutureData(); new Thread(new Runnable() { @Override public void run() { RealData realData = new RealData(queryStr); futureData.setRealData(realData); } }).start(); return futureData; } }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); } }