Future模式个人理解
Future模式
(1)定义理解:当我们在淘宝下订单时,我们怎么知道下单成功,这就是通过代理模式,将订单返回给你,让你知道你下单成功。然后异步处理你订单里的东西,等东西到了之后再通知你,真正的物品到了。这就是Future模式,通过代理模式和开启一个线程来进行异步处理想要的数据,其他线程可以继续使用。
(2)角色有:
Main:调用Client 发送请求
Client:返回Data对象,分为两步,立即返回FutureData代理对象,并开启新线程用于获取真正的数据。
Data:RealData和FutureData的抽象接口
FutureData:RealData的代理对象,构造很快,是一个假数据。
RealDate:真实数据,但是构造很慢。
(3)JDK中有内置的Future模式
实例使用代码如下:
public class RealData implements Callable<String>{ //定义一个变量用于保存数据 public String temp; public RealData3(String string){ this.temp=string; } @Override public String call() throws Exception { //真实业务逻辑,执行速度可能很慢。 StringBuffer sb=new StringBuffer(); for(int i=0;i<10;i++){ sb.append(temp); Thread.sleep(1000); } return sb.toString(); } } public class Main{ public static void main(String[] args) throws InterruptedException, ExecutionException { //定义代理对象 FutureTask<String> futureTask=new FutureTask<String>(new RealData3("a")); //在线程池中开启一个线程,用于执行call()方法。 ExecutorService eService=Executors.newFixedThreadPool(1); eService.submit(futureTask); //代理对象执行完成,另一个线程中的真实对象的获取依然在进行。 System.out.println("请求完毕"); //此处尝试其他操作 for(int i=0;i<10;i++){ Thread.sleep(1000); System.out.println(i); } //此处,如果call依然没有完成会继续等待 System.out.println(futureTask.get()); } }
作者:张九星
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。