首页 > 代码库 > Future模式
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模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。