大白话解释:多线程Future

Future其实是一种设计模式,它的核心思想假如有一个方法f,它的计算过程是相当耗时的,显然直接获取结果是不明智的,因为需要等待它计算完才能返回。所以可以在调用方法f的时候让它返回一个Future,通过这个Future可以监控和控制方法f的计算过程。它有几个核心方法:

get():获取返回值结果。

cancel():取消方法的执行过程。

isDown():判断方法是否执行完成。

isCancelled():判断方法是否已经被取消执行。

FutureTask就是Future的实现类,FutureTask实现了RannableFuture接口,而RannableFuture接口继承了Rannable接口和Future接口。它有两个构造方法,一个是传入一个Callable(就是带返回值的线程任务),另一个是传入一个Rannable和一个result,它内部会将它们转化成一个Callable。这也就说明了其实在代码的层次上Callable可以看作是由一个Rannable和一个返回值构成的。因为FutureTask实现了Runnable接口,所以可以直接将FutureTask作为参数传给Thread来开启线程。在FutureTask中,有一个重要的state变量,它有七种状态,取值0~6,还有两个核心方法是get和set。set方法就是设置返回值给一个内部变量outcome,并修改state状态的值。get方法就是返回outcome储存的结果,首先它会判断state的状态是否是正常完成状态,如果是就返回结果,如果state处于未完成状态,就让当前线程处于阻塞状态,等待唤醒。如果state状态为异常或者中断,就抛出异常信息。

猜你喜欢

转载自blog.csdn.net/qq_37685457/article/details/89790213