java.util.FutureTask<V>整理

FutureTask作为Java并发编程中的重要组件,实现了RunnableFuture接口,既可作为Runnable运行,又能持有Callable任务的结果。本文介绍了FutureTask的工作原理,包括其如何执行Callable任务、获取执行结果,以及内部的状态管理机制。
 FutureTask 是一个泛型类,实现了java.util.concurrent.RunnableFuture 接口,该RunnableFuture 接口继承了java.util.concurrent.Future 接口与java.lang.Runnable接口。
    因此,首先FutureTask 类的实例是一个Runnalbe实例,可作为target参数传入Thread(target)构造器。通过调用Thread类的start()成员方法,可使一个新线程处于就绪状态。新线程获取CPU资源后,转变为运行状态时,此时target实例的run()方法会被调用。在此例中,即FutureTask 的实例中的run()方法会被调用。
    FutureTask 中有成员变量 c,c为Callable 接口的引用,此Callable 引用通过FutureTask 的构造函数获得,同时该类中也有成员变量 outcome, outcome为V的引用。在run()方法中,调用了c 的call()方法,该方法为真正的运算执行体,call()方法返回类型为V。如果线程执行顺利,则会按照 run()-->call()的调用顺序,调用Callable 对象的call()方法,并将call方法返回的结果存储于FutureTask 实例的outcome成员变量中。
    FutureTask 同时提供了成员方法get(),以获取线程执行后的返回结果outcome。FutureTask 中的所有操作都是线程安全的,该类有7个final 静态整型变量,分别为NEW, COMPLETING, NORMAL, EXCEPTIONAL, CANCELLED, INTERRUPTING, INTERRUPTED,数值从0到6,用于标识线程的运行状态。只有当状态为NORMAL时,实例才可以通过get()方法获取线程执行结果。

转载于:https://www.cnblogs.com/nomorewzx/p/4708643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值