Future接口


此接口主要用于:
  • 代表异步计算的执行结果;
  • 用于可取消的task;(比使用interrupt实现取消要方便 )



FutureTask类

FutureTask是Future的一个实现类;类图层次结构如下:



FutureTask任务的创建--通过构造函数

在java的并发模型中,表示Task的类主要有如下几个(其中Callable和Runnable是最基本的):
  • Callable;
  • Runnable;
  • Future;



其中Callable和Runnable接口的主要区别在于:
  • Callable可以有返回值,且可以抛出异常;
  • Runnable没有返回值,且不抛出异常;

FutureTask任务的创建,可以通过Callable和Runnable两个任务类进行创建,即对Callable和Runnable进行封装,见下面的构造函数:



get():过去异步计算的结果

(有时间待完善。。。)



done():异步计算完成后调用的回调函数 ==>CompletionService

可在FutureTask子类中实现该方法,以实现一些额外的功能,如:


Java类库中,有一个类的功能,就是基于此done()方法来实现的,
该类中包括两个重要的属性:
  • Executor;==>用于提交任务使用
  • BlockingQueue; ==>当任务完成后,会将task对应的Future保存起来;


具体实现步骤如下:
Callable或Runnable任务 ===> RunnableFuture ===> QueueingFuture
1.newTaskFor(): 将Callable和Runnable任务封装为:RunnableFuture


2. 使用FutureTask的done():提交task到BlockingQueue ==>实现“生产者-消费者


3.  使用executor来提交任务;


通过上面3个步骤,一个Callable或Runnable任务在执行完成后,都会被添加到BlockingQueue中,此时就可以实现生产者和消费者模式;



有时间补充。。。。








附件列表

【并发编程】Future和FutureTask以及CompletionService的更多相关文章

  1. 并发编程-Future+callable+FutureTask 闭锁机制

    项目中经常有些任务需要异步(提交到线程池中)去执行,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?用runnable是无法实现的,我们需要用callable实现. FutureTask ...

  2. 多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture

    目录 1.Futrue 2.FutureTask 3.CompletionService 4.CompletableFuture 5.总结 ================正文分割线========= ...

  3. Java并发编程:Future接口、FutureTask类

    在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就 ...

  4. 【多线程】Future和FutureTask以及CompletionService

    Future接口 此接口主要用于: 代表异步计算的执行结果: 用于可取消的task:(比使用interrupt实现取消要方便 ) FutureTask类 FutureTask是Future的一个实现类 ...

  5. Java并发编程核心方法与框架-CompletionService的使用

    接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离.使用submit()执行任务,使用take取得已完成的任务,并按 ...

  6. JAVA并发编程学习笔记------FutureTask

    FutureTask是Future和Callable的结合体.传统的代码是这样写的Future f = executor.submit(new Callable()); 然后通过Future来取得计算 ...

  7. Java并发编程笔记之FutureTask源码分析

    FutureTask可用于异步获取执行结果或取消执行任务的场景.通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过Fu ...

  8. Java并发编程:Callable、Future和FutureTask

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  9. (转)Java并发编程:Callable、Future和FutureTask

    Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...

随机推荐

  1. 51Nod 1419 最小公倍数挑战

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1419 题意: 思路: 要想最大,肯定去找尽量大的互质的数,如果不是互质的 ...

  2. shell脚本监控Linux系统性能指标

    2016-11-04 22:41 原作者不详 分类: Linux(7) 在服务器运维过程中,经常需要对服务器的各种资源进行监控, 例如:CPU的负载监控,磁盘的使用率监控,进程数目监控等等,以在系统出 ...

  3. install ros-indigo-laser-geometry

    -- Using these message generators: gencpp;genlisp;genpy CMake Warning at /opt/ros/indigo/share/catki ...

  4. RabbitMQ入门_01_简介与安装

    A. 资源与参考文档 官网:https://www.rabbitmq.com/ B. 学习目的 部门目前使用其他部门维护的 WebLogic 的 JMS 消息服务,缺乏足够的技术支持与运维支持.随着基 ...

  5. 在线教育工具—白板系统的迭代1——bug监控排查

    近一年都在做一款在线教育工具(以下统称为“白板”)的开发工作,期间遇到N多的问题与坑,遂在此记录,并及时更新. 第一篇:关于资源访问填坑 因为是在线授课,所以使用我们白板的人员地域范围较广,基本上西到 ...

  6. Rails 5 Test Prescriptions 第8章 Integration Testing with Capybara and Cucumber

    Capybara:  A complete reference is available atrubydoc.info. 集成测试就是把局部的程序组合起来测试. 端到端测试是一个特殊的集成测试,覆盖了 ...

  7. 解决xshell乱码问题

    如下图,xshell在执行命令时显示乱码 解决办法: 文件—属性—终端,将编码改成Unicode即可 参考文章 https://blog.csdn.net/yueloveme/article/deta ...

  8. UVA-863 Not so Mobile (简单二叉树)

    题目大意:给一个树状天平,判断是否平衡.树状天平是按递归给出的. 题目分析:平衡的条件是子天平都平衡,并且w1*d1==w2*d2,其中w1和w2为子天平的总重量,d1和d2为力矩. 代码如下: # ...

  9. JavaScript学习总结(二十一)——使用JavaScript的数组实现数据结构中的队列与堆栈

    今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被 ...

  10. powerdesigner安装图解