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周期任务重复执行

 

 

 

你可能感兴趣的:(java多线程编程)