美文网首页
深入理解Future体系

深入理解Future体系

作者: 蒙古code | 来源:发表于2019-07-17 22:47 被阅读0次

FutureTask类实现了RunnableFuture接口,

而RunnableFuture继承了Runnable和Future,

也就是说FutureTask既是Runnable,也是Future。

因此FuntureTask可以直接作为Thread的构造参数直接使用了。

Callable接口

@FunctionalInterfacepublicinterfaceCallable{Vcall()throwsException;}

Callable接口类似于Runnable,都是为了成为其它线程的执行单元而被设计出来的,但与Runnable不同的是,Callable接口不仅拥有返回值,还会抛出异常。

Future接口

Future表示的是异步计算的结果,在Future接口中,提供了一些用于检查任务执行是否完成,等待任务执行完成和取出任务执行结果的方法。

当运算完成后只能通过get()方法进行检索,并且调用了get()方法后出阻塞当前线程直到任务执行完成。

通过cancel()方法,可以取消任务。

通过isCancelled()方法,可以判断任务是否被取消了

通过isDone()方法,可以判断任务是否已经完成了

RunnableFuture接口

RunnableFuture 继承自Runnable和Future,即提供了可以使用Runnable来执行任务,又可以使用Future执行获取结果的功能,同时还拥有了取消任务,判断任务状态的功能

FutureTask

一个异步可取消计算,FutureTask提供了Future接口的基本实现,其中包含开始执行任务和结束任务的方法,查询任务执行是否完成的方法,或者获取任务结果的方法,等等。仅当任务执行完成了,才能获取到结果。

并且调用get()方法会阻塞当前线程直到任务执行完成,如果任务已经完成了,不能重新开始或者取消,除非这个任务调用了runAndReset()方法。(Executes the computation without setting its result, and then resets this future to initial state, failing to do so if thecomputation encounters an exception or is cancelled.  This is designed for use with tasks that intrinsically execute more* than once.)

FutureTask可以包装一个Callable或者是Runnable,因为FutureTask实现了Runnable对象(Callable接口类似于Runnable,Callable相对于Runnable来说,仅仅多了一个返回值和Exception抛出而已),我们可以把一个FutureTask提交给线程池的Executor来执行。FutureTask,除了作为一个单独的类之外,它的protected 方法在我们自定义Task的时候是非常有用的。

FutureTask源码分析

你是如何拿到一个线程的执行结果的?Future体系源码深度解析 - 简书

可以根据这个文章来看

在实现的 方法种有个run方法 其中有用到

UNSAFE.compareAndSwapObject(this, runnerOffset,null, Thread.currentThread()))

这个是一个CAS操作 是个乐观锁 对操作是原子的 保证是最新的

CAS底层使用JNI调用C代码实现的,如果你有Hotspot源码,那么在Unsafe.cpp里可以找到它的实现

相关文章

  • 深入理解Future体系

    FutureTask类实现了RunnableFuture接口, 而RunnableFuture继承了Runnabl...

  • (6)Future深入理解

    Future 表示异步计算的结果,提供了一些方法来检查是否计算完成,等待计算完成和取回计算结果。 当运算完成后只能...

  • Future详解

    要深入理解CompletableFuture,就必须先搞懂Future的原理,因为CompletableFutur...

  • 2019-04-01——Java并发包 Future

    Future体系类图 Future Future保存异步计算的结果,该接口提供以下的方法 RunnableFutu...

  • 深入理解MediaScanner

    转自[深入理解Android卷一全文-第十章]深入理解MediaScanner本章主要内容 介绍多媒体系统中媒体文...

  • Android线程池学习笔记(一)

    Android线程学习笔记学习了线程源码,Android Future学习笔记学习了Future体系,接下来我们就...

  • 深入理解Flutter动画体系

    Flutter的动画体系是怎么运作的,各组件之间的关联关系及原理什么,隐式动画、显式动画怎么区分,本文将会进行详细...

  • MVP - 个人理解

    最近在研究MVP这个体系架构,为了深入理解这个体系架构,自己也做了一些Demo。 体系目录 示例图片 每一模块的功...

  • Dart中Future中api的一些使用

    总结了几个Future使用的小示例,便于我们理解Future API的原理。 Future.when 下面的例子,...

  • Future的理解

    public interface Future{ boolean cancel(boolean mayInterr...

网友评论

      本文标题:深入理解Future体系

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