一 点睛
要创建一个线程,可以继承自 Thread 类,或者实现 Runnable 接口,但 JUC 还提供了另外一种方式,通过 Callable + FutureTask 创建并使用线程。
1 FutureTask
Future 是 JDK 提供用于处理多线程环境异步问题的一种模式,而 FutrueTask 就是对 Future 模式的一种实现。下面通过一段对话来理解什么是“Futura 模式”。
老板:“小王,把会议纪要整理好给我。”
小王:“好的,没问题。”
随后,小王立刻开始整理,几分钟后,小王整理好的文件发送给老板。
以上场景,在多线程之中称为“Futura 模式”。当客户端(老板)向服务端(小王)发起一个请求时,服务端会立刻给客户端返回一个结果(好的,没问题。”),但实际任务并没有开始执行。客户端在拿到“假的”响应结果的同时,服务端才会去真正执行任务,并在任务处理完毕后,将真正的结果再返回给客户端(整理好的文件发送给老板。)。
Future 模式的处理流程如下:
Future 模式的最大好处就是客户端在发送出请求后,可以马上得到一个结果(假的结果),而不用一直等待着服务端来处理。
在使用 FutureTask 时,get() 方法就用于返回服务端真正处理后的真实值(RealData)。由于服务端不一定马上能处理完毕,因此在调用 get() 方法时会出现一定时间的阻塞(等待服务端处理完毕)。
2 Callable
Callable