Future模式
Posted 起个po名真费劲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Future模式相关的知识,希望对你有一定的参考价值。
Future模式核心思想是异步调用。我们可以先拿到调用的凭证,让方法先返回,让他在后台慢慢的处理这个请求。通过这个可以实现异步操作。
JDK经准备好了一套完美的实现方式。我们用于执行的异步线程需要继承Callable接口,相当于Runnable,Callable接口中有一个方法call(),相当于run(),在里面写自己的业务。把这个线程放在futureTask中,这个相当于凭证。把futureTask交给线程池来进行异步处理,我们可以通过futureTask中的get()方法返回结果,结果没有返回会阻塞。
具体实现:
package jdkFuture; import java.util.concurrent.Callable; public class ReaLData implements Callable<String>{ private String para; public ReaLData(String para){ this.para = para; } @Override public String call() throws Exception { StringBuffer sb = new StringBuffer(); for(int i = 0;i < 10;i ++){ sb.append(para); try{ Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } } return sb.toString(); } }
package jdkFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; public class FutureMain { public static void main(String[] args) { FutureTask<String> future = new FutureTask<String>(new ReaLData("a")); ExecutorService executor = Executors.newFixedThreadPool(1); executor.submit(future); System.out.println("请求完毕"); while(true){ try { System.out.println("数据= " + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } }
以上是关于Future模式的主要内容,如果未能解决你的问题,请参考以下文章