java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23
有一个问题,调用者由于被调用者的阻塞而陷入阻塞。
---
代码:
---
结构思路:
- FutureTask:泛型接口只有一个call方法,这个是真正的做事情的。
- Future:泛型接口,里面只有一个get方法,返回任意类型的结构,别人调用我我返回一个Future,通过get方法返回真正的结果。
- FutureService:桥接起来,不想调用call就返回Future,一个submit方法,返回值为Future泛型,参数为FutureTask泛型。
- AsyncFuture:implements Future。
- 总结:就是直接返回一个对象先相当于小票,然后调用这个对象的get方法,返回耗时操作的真正结果。
-------------------------------------------------------------21-----------------------------------------------------------------------------------------------
代码:
角色:
Future:代表的是未来的凭据
FutureTasK:调用逻辑进行隔离
FutureService:桥接的作用 不用知道前两者的存在
问题:get也是阻塞的。假如时间漫长了也会阻塞的。
-------------------------------------------------------------22------------------------------------------------------------------------------------------------
问题:
volatile:可见性(高速缓存一致性协议)和有序性(通过内存屏障)。
加volatile则成员变量的对象的new一定在主对象之前。
用法:
1.标志位
2.防止内存重排序
3.共享变量---主要是防止内部的重排序的
4.基本变量的赋值和读取是原子性的
volatile:https://www.jianshu.com/p/ef8de88b1343
-------------------------------------------------------------23-------------------------------------------------------------------------------------------------