美文网首页
Future模式

Future模式

作者: 12点前睡觉hhh | 来源:发表于2019-06-02 18:49 被阅读0次

Future模式是java多线程开发的一种常用模式,它的核心思想是*异步调用
Future模式类似在网上买东西。比如你在淘宝下单买了一步手机,当我们支付完成以后,手机没有办法立即送到家里,但是在电脑上会产生一个订单。这个订单就是将来发货或者领取手机的重要凭证,这个凭证也就是Future模式会给出一个契约。支付结束以后,你就可以想干嘛干嘛,这个订单就成了商家配货,发货的驱动力。当然这一切你都不用担心,你要做的就是快递送货时,收货就好了。
对于Future模式来说,虽然它无法立即给你需要的数据,但是它会返回一个契约,将来你凭借这个契约取重新获取你需要的信息即可。

1.JDK中的Future模式

Future接口类似于前文面熟的订单或者说是契约。其中Future接口类似于前文描述的契约。通过它可以得到线程执行完之后的数据。RunnableFuture继承了Future和Runnable接口,它有一个具体的实现类FutureTask类。Future类有一个内部类Sync,一些实质性的工作会委托Sync类实现,而Sync类最终会调用Callable接口,完成实际数据的组装工作。
Callable接口只有一个call方法,它会返回需要构造的数据。
一个简单的Future使用实例。

public class RealData implements Callable<String> {
    private String data;
    public RealData(String data){
        this.data=data;
    }
    @Override
    public String call() throws Exception {
        StringBuffer sb=new StringBuffer();
        for (int i=0;i<10;i++){
            sb.append(data);
            Thread.sleep(100);
        }
        return sb.toString();
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> future = new FutureTask<>(new RealData("h"));
        ExecutorService es = Executors.newSingleThreadExecutor();
        es.submit(future);
        System.out.println("请求完毕");
        try{
            //进行其他操作,这里使用sleep模拟其他业务操作
            Thread.sleep(2000);
        }catch (InterruptedException e){
        }
        //使用future.get得到返回结果,如果call方法还没执行完,那么将等待。
        System.out.println("数据:"+future.get());
    }
}

除了基本功能外,JDK还为future接口提供了一些简单的控制功能。

boolean cancel(boolean mayInterruptIfRunning) ; //取消任务
boolean iscancelled();//是否已经取消
boolead isDone();//是否已经完成
V get() ;//取得返回对象
V get(Long timeout,TimeUnit unit);//取得返回对象,可以设置超时时常

相关文章

  • Java8新的异步编程方式 CompletableFuture(

    一. Future JDK 5引入了Future模式。Future接口是Java多线程Future模式的实现,在j...

  • Java8 CompletableFuture指北

    一、JAVA 异步处理的演变 1.1 Future JDK 5引入了Future模式。Future模式是多线程设计...

  • Java并发编程——CompletableFuture详解

    一、简介 JDK 5引入了Future模式。Future接口是Java多线程Future模式的实现,在java.u...

  • Java中的Future模式

    Future模式 核心思想是异步调用,在java中内置了对Future模式的实现,主要就是Future接口、Cal...

  • CompletableFuture打开方式

    前言: Future模式是CompletableFuture的基础,Future模式有哪些应用场景呢? 超时控制场...

  • 多线程Future设计模式的两种用法

    多线程Future设计模式 Future接口定义: Future接口的实现类: 封装任务的FutureTask接口...

  • Future

    Future模式 概念 ```Future模式是多线程设计常用的一种设计模式,类似商品订单。商品下单后,会立即得到...

  • java初入多线程18

    Future 模式 该模式核心思想是异步调用。 jdk 中的Future 模式 在这里面我们首先创建FutureT...

  • Future模式

    https://www.cnblogs.com/lcngu/p/5289605.html Future模式简介 F...

  • Future模式

    一、定义Future模式用来获取线程的执行结果。在Thread-Per-Message模式中,如果调用一个线程异步...

网友评论

      本文标题:Future模式

      本文链接:https://www.haomeiwen.com/subject/vvaxxctx.html