zoukankan      html  css  js  c++  java
  • Java高级(一) Future机制

    Future机制

    1 为什么出现Future机制

    常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。

    这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。

    从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

    Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。

    因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果。

    2 Future结构

    类图:

    image-20200804060937014

    2.1 Future接口

    Future接口用于对具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。

    必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。

    通过接口的定义,可以看到实现Future接口的子类会具有这些行为:

    • 可以取消这个执行逻辑,如果这个逻辑已经正在执行,提供可选的参数来控制是否取消已经正在执行的逻辑。

    • 可以判断执行逻辑是否已经被取消。

    • 可以判断执行逻辑是否已经执行完成。

    • 可以获取执行逻辑的执行结果。

    • 可以允许在一定时间内去等待获取执行结果,如果超过这个时间,抛TimeoutException

    2.2 FutureTask类

    FutureTask是Future的具体实现。

    FutureTask实现了RunnableFuture接口。RunnableFuture接口又同时继承了FutureRunnable 接口。

    所以FutureTask既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。

    FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {
    
        @Override
        public Integer call() throws Exception {
            Thread.sleep(3000);
            return 5;
        }
    });
    
    new Thread(task).start();
    
    //task.get()
    //。...
    

    参考

    Java的Future机制详解

  • 相关阅读:
    GIT使用入门
    源代码的下载和编译:
    搭建Android开发环境
    ndroid系统移植与驱动开发概述
    python 通过2个字典中的key比较 如果key一样2个字典中的v和vaule重新组成新的的字典
    Git 多分支开发合并
    Python清除字典中值为空的键值对
    01 Java基本数据类型、包装类、装箱拆箱、parseXxx()、String.valueOf()
    00 Java开发准备
    关于程序书写风格的一些漏见
  • 原文地址:https://www.cnblogs.com/lyldelove/p/13431083.html
Copyright © 2011-2022 走看看