futrue模式

来源:互联网 发布:淘宝上传好评截图 编辑:程序博客网 时间:2024/06/14 16:58

futrue模式

是一种常用的多线程设计模式,客户端发起请求,服务端不需等待该数据处理完成便立即返回一个伪造的代理数据,用户也无需等待,先去执行其他的若干操作。

public static void main(String[] args) {        FutrueClient futrueClient = new FutrueClient();        Data data = futrueClient.request("param");        System.out.println("请求成功,该操作耗时。。");        System.out.println("做其他事情。。");        String result = data.getRequest();        System.out.println(result);    }
public class FutrueClient {    public Data request(String query) {        final FuData fuData = new FuData();        new Thread(new Runnable() {            @Override            public void run() {                Data realData = new RealData(query);                fuData.setRealdata(realData);            }        }).start();        return fuData;    }
package futrue;public class FuData implements Data {    private Data realdata;    private boolean isSetSuccess = false;    public synchronized void setRealdata(Data realdata) {        if (isSetSuccess) {            return;        }        this.realdata = realdata;        isSetSuccess=true;        notify();    }    @Override    public synchronized String getRequest() {        while (!isSetSuccess){            try {                wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        return this.realdata.getRequest();    }}
package futrue;public class RealData implements  Data {    private String request ="futrue 模式";    public RealData(String query) {        System.out.println("这里开始做查询,参数为"+query);        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        request="查询结果";    }    @Override    public String getRequest() {        return this.request;    }}
package futrue;public interface Data {    String getRequest();}