并行程序设计模式之 -> Future模式

package com.module.other;

public class Test01 {
	public static void main(String[] args) {
		Client client = new Client();
		Data data = client.request("name");
		System.out.println("请求完毕");
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("数据:" + data.getResult());
	}
}

interface Data {
	String getResult();
}

class RealData implements Data {
	protected final String result;

	public RealData(String data) {
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		result = data + "666";
	}

	@Override
	public String getResult() {
		return result;
	}
}

class FutureData implements Data {

	protected RealData realData = null;

	protected boolean isReady = false;

	public synchronized void setRealData(RealData realData) {
		if (isReady)
			return;
		this.realData = realData;
		isReady = true;
		notifyAll();
	}

	@Override
	public synchronized String getResult() {
		while (!isReady) {
			try {
				wait();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		return realData.getResult();
	}
}

class Client {
	public Data request(final String queryStr) {
		final FutureData future = new FutureData();
		new Thread() {
			public void run() {
				RealData realData = new RealData(queryStr);
				future.setRealData(realData);
			};
		}.start();
		return future;
	}
}
发布了176 篇原创文章 · 获赞 1 · 访问量 7149

猜你喜欢

转载自blog.csdn.net/qq_37769323/article/details/104202130