本文是自己学习Java中Future机制的笔记。阅读了很多网上的源码分析,自己对照着JDK1.8源码走了一遍。算是稍微理解了一下Future机制。
本文的内容包含如下:
- 为什么出现Future机制
- 如何使用Future机制
- Future 的 UML 图
- Future和FutureTask的关系,以及FutureTask的源码解析
- 用的知识点补充,比如
Unsafe
类中compareAndSwap
等
一、为什么出现Future机制
常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。
这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。
从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。
Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。(因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果)