Java 中的 FutureTask 作为可异步执行任务并可获取执行结果而被大家所熟知。通常可以使用 future.get() 来获取线程的执行结果,在线程执行结束之前,get 方法会一直阻塞状态,直到 call() 返回,其优点是使用线程异步执行任务的情况下还可以获取到线程的执行结果,但是 FutureTask 的以上功能却是依靠通过一个叫 AbstractQueuedSynchronizer 的类来实现,至少在 JDK 1.5、JDK1.6 版本是这样的(从 1.7 开始 FutureTask 已经被其作者 Doug Lea 修改为不再依赖 AbstractQueuedSynchronizer 实现了,这是 JDK1.7 的变化之一)。