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唤醒期待的线程就能拿到执行后果了。