FutureTask实现分析

FutureTask实现一个可以取消的异步计算任务。

 

FutureTask的同步控制有内部类Sync负责;使用AQS的sync state表示运行状态。

 

FutureTask的状态:

  1. RUNNING =1: 表示任务正在运行
  2. RAN =2: 表示任务已经运行结束
  3. CANCELLED =4: 表示任务被取消
  4. 任务创建时,state = 0 

FutureTask的同步操作发生在:

  1. get()/get(timeout, TimeUnit) 等待任务执行结束;
  2. 同步控制采用共享模式:重写并支持AQS的 tryAcquireShare() /tryReleaseShare()
  3. 释放并唤醒等待线程:设置结果innerSet()/取消任务innerCancel()/设置任务异常innerSetException()

唤醒同步的时间点:任务执行结束innerRun()/任务取消innerCancel()/任务发生异常innerRun()或innerRunAndReset()调用innerSetException()方法

 

FutureTask中get()/get(timeout, TimeUnit)同步线程执行时,分别调用AQS方法:acquireSharedInterruptibly()/tryAcquireSharedNanos()

 

FutureTask中唤醒等待线程时,调用AQS方法:releaseShared()

 

FutureTask提供回调方法done() : 该方法在任务执行完成/任务取消/任务发生异常时回调;ExecutorCompletionService中任务QueueingFuture实现该方法,在任务完成时回调以将结果存入阻塞队列

 

 

FutureTask中任务多次执行方法:runAndReset() 执行任务但不设置任务执行结果,之后重置FutureTask为初始状态(state=0); 如果任务执行异常或者任务被取消,则任务无法再次执行; PS:此方法支持ScheduledFutureTask周期任务重复执行

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值