美文网首页
JavaCallable和Future

JavaCallable和Future

作者: 黎繁介 | 来源:发表于2018-06-10 15:42 被阅读7次

        JDK1.5开始,Java提供了Callable接口,此接口可以说是Runnable接口的增强版,但它不是Runnable的子接口,它是以call()方法作为线程执行体:

        call()方法可以有返回值。

        call()方法可以声明抛出异常。

        由于不是Runnable的子接口,于是Callable对象就不能作为Thread的target,但是Java提供了另一个方法Future接口来代表Callable的call()方法的返回值,Future接口有一个实现类FutureTask,并且还实现了Runnable接口,于是就可以使用FutureTask对象最为Thread的target。


Future接口里定义了几个公共方法来关联对应的Callable任务:

        boolean cancel(boolean mayInterruptRunning):试图取消该Future关联的Callable任务。

        V get():返回Callable里call()方法的返回值。该方法会导致程序阻塞,必须等到子线程结束时才能得到返回值。

        V get(long timeout,TimeUnit unit):返回Callable里call()方法的返回值。该方法最多让程序等待timeout和unit指定的时间,到达指定时间后还没有得到返回值,将会抛出TimeoutException异常。

        boolean isCancelled():如果Callable任务在正常完成前被取消,则返回true。

        boolean isDone():如果Callable任务已经完成,则返回true。


创建、启动有返回值的线程步骤:

        1.创建Callable接口实现类,实现call()方法,call()方法作为线程执行体,有返回值。

        2.创建Callable实现类的实例,并用FutureTask类来包装Callable对象,该Future对象封装了Callable对象的call()返回值。

        3.让FutureTask的对象作为Thread的target新建一个线程并启动它。

        4.通过FutureTask的对象的方法来获取子线程执行完后的返回值。

实现代码:

有返回值得线程 Future实现类FutureTsk用法 运行结果

-------------上一节“Java-线程组”-------------------

--------------下一节“Java-线程池”------------------

相关文章

  • JavaCallable和Future

    JDK1.5开始,Java提供了Callable接口,此接口可以说是Runnable接口的增强版,但它不是Runn...

  • In future和In the future区别

    In future是「今後」,即「從今以後」。例如:事情不快,所以向人警誡或自我警誡會如何改變之類。例如:我今後重...

  • NioEventLoop类

    Future   netty包的Future继承了JDK里的Future,主要是增加了addListener()和...

  • Future/CompletableFuture与Lambda

    Future和CompletableFuture Future有五个方法 CompletableFuture也有五...

  • CompletableFuture 详解

    CompletableFuture类实现了CompletionStage和Future接口。Future是Java...

  • Java并发编程:Callable、Future和FutureT

    Java并发编程:Callable、Future和FutureTask Future就是对于具体的Runnable...

  • Now和Future

    从前,在一棵大树下住着两只小蚂蚁。一只叫做Now,一只叫做Future。 这两只小蚂蚁每天都很勤奋地出去寻找食物。...

  • Callable和Future

    一.背景 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个...

  • Future和FutureTask

    Executor框架使用Runnable 作为其基本的任务表示形式。Runnable是一种有局限性的抽象,然后可以...

  • Future和CompletableFutrue

    作为一个java为主语言的后端开端,实际使用异步的场景也不多,对于Futrue等仅仅在会使用的阶段,内部的原理一知...

网友评论

      本文标题:JavaCallable和Future

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