多线程的设计模式--Future模式,Master-Worker模式,生产者-消费者模式

代码示例:

多线程的设计模式--Future模式,Master-Worker模式,生产者-消费者模式
public interface Data {

    String getRequest();

}

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){
        //1 我想要一个代理对象(Data接口的实现类)先返回给发送请求的客户端,告诉他请求已经接收到,可以做其他的事情
        final FutureData futureData = new FutureData();
        //2 启动一个新的线程,去加载真实的数据,传递给这个代理对象
        new Thread(new Runnable() {
            @Override
            public void run() {
                //3 这个新的线程可以去慢慢的加载真实对象,然后传递给代理对象
                RealData realData = new RealData(queryStr);
                futureData.setRealData(realData);
            }
        }).start();
        
        return futureData;
    }
    
}

public class Main {

    public static void main(String[] args) throws InterruptedException {
        
        FutureClient fc = new FutureClient();
        Data data = fc.request("请求参数");
        System.out.println("请求发送成功!");
        System.out.println("做其他的事情...");
        
        String result = data.getRequest();
        System.out.println(result);
        
    }
}
多线程的设计模式--Future模式,Master-Worker模式,生产者-消费者模式

相关文章:

  • 2021-11-23
  • 2021-06-21
  • 2021-12-15
  • 2021-12-05
  • 2021-06-08
  • 2021-12-05
  • 2022-01-28
  • 2022-12-23
猜你喜欢
  • 2021-12-05
  • 2021-12-05
  • 2021-09-05
  • 2021-06-24
  • 2021-12-05
相关资源
相似解决方案