1、future 是如何做到在线程执行完之后拿到执行后果的?
FutureTask 是一个 Runnable,FutureTask 承受一个 Callable,当把 FutureTask 当作 Thread 的 target, 去执行一个线程调用(start),start() 之后最终会调用 FutureTask 的 run 办法,run 办法又会调用 Callable 的 call 办法,call 办法执行完,会把后果放入到一个 FutureTask 的一个 returnObject 中。
调用 FutureTask 时是怎么做到执行完才拿到这个后果呢?很简略生产者消费者问题,get 的时候判断这个 returnObject 是否为 null, 如果为 null 则 wait(), 当下面的 call 办法执行完并把后果放入 returnObject 后,调用 notify 唤醒期待的线程就能拿到执行后果了。