futuretask实现原理
时间: 2023-12-22 09:04:16 浏览: 81
FutureTask是Java中实现Future模式的一个类,它的实现原理如下:
1. FutureTask是一个可取消的异步计算任务,它通过一个Callable对象来完成计算任务。当FutureTask被创建时,它会立即启动一个新的线程去执行计算任务。
2. FutureTask内部维护了一个状态变量state,表示计算任务的状态。在任务执行期间,state的值可能会被修改为以下四个状态:
- NEW:表示任务尚未开始执行。
- COMPLETING:表示任务已经执行完毕,但还没有返回结果。
- NORMAL:表示任务已经执行完毕,并且正常返回结果。
- EXCEPTIONAL:表示任务执行出现异常。
3. FutureTask提供了三个方法来操作state变量:compareAndSetState、set和setException。compareAndSetState方法用于原子性地修改state变量的值,set和setException方法则用于设置任务的返回结果和异常信息。
4. FutureTask还提供了一些方法来查询任务的状态和结果,例如isDone、get和get(timeout, unit)方法。当调用get方法时,如果任务还没有执行完毕,则会阻塞当前线程直到任务执行完毕。
5. 当任务执行完毕后,会调用done方法来通知所有等待结果的线程。done方法会检查任务的状态,如果任务执行正常,则会调用set方法设置任务的返回结果;如果任务执行异常,则会调用setException方法设置任务的异常信息。
6. 如果任务被取消,则会调用cancel方法,该方法会尝试原子性地修改state变量的值,如果修改成功,则会中断任务执行线程并抛出CancellationException异常。
总之,FutureTask通过一个线程池来执行计算任务,并提供了一些方法来查询任务的状态和结果,从而实现了异步计算和任务取消的功能。
阅读全文