Future是在多线程系统中应用最多的一个功能, 在异步获取线程处理结果时, 提供了可取消, 可打断, 可超时, 可等待等诸多处理方式.
以如下代码示例,看下JDK是如何实现这些特性的....后续线程任务的所有执行,超时等操作都是基于FutureTask处理的....流程中isCancelled(), isDone()等判断状态的方法都是根据state处理的....stateOffset地址的方式, 这种方式在和AtomicInteger中value的用法是一样的, 可以参照文章: 并发原子性之Atomic.
3. waiters
阻塞线程列表....FutureTask执行流程
在一个异步处理流程中, Callable会被封装成FutureTask, 并最后由线程池分配线程执行, 这里先不考虑线程池是如何分配线程的.