FutureTask详解

简介:

FutureTask实现的接口有Future接口、Runnable接口。

因此,FutureTask可以交给Executor执行,也可以由调用线程直接执行,FutureTask.run()。

FutureTask的三种状态:

①未启动。还未执行FutureTask.run();

②已启动。run方法执行过程中;

③已完成。run方法执行结束或取消、或异常。

根据上面的三种状态:

1、对于FutureTask.get()方法:

当FutureTask处于未启动/已启动状态,执行FutureTask.get()将导致调用线程阻塞

已完成,将导致立即返回结果/抛出异常

2、对于FutureTask.cancel(true/false)方法:

未启动状态时调用:不被执行;

已启动状态时调用:(1)true:以中断方式试图停止任务(2)false:让正在执行的任务运行完成,剩下的哼哼。

已完成状态时调用:return false;

代码实现:

FutureTask基于AQS实现,属于可阻塞类中的一员。

(AQS是一个同步框架,提供通用机制来原子性管理同步状态、阻塞、唤醒线程,以及维护被阻塞线程的队列)

每一个基于AQS实现的同步器至少包含以下两种操作:

①至少一个acquire操作:用来阻塞调用线程。在FutureTask中对应get方法。

②至少一个release方法:用来解除阻塞。在FutureTask中对应run()方法和cancel(...)方法。

基于“复合优先于继承的原则”,FutureTask声明了一个内部私有的继承于AQS的子类Sync,对FutureTask的所有的公有方法都会调用这个内部子类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值