java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23

有一个问题,调用者由于被调用者的阻塞而陷入阻塞。

---

代码:

java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23

---

结构思路:

  1. FutureTask:泛型接口只有一个call方法,这个是真正的做事情的。
  2. Future:泛型接口,里面只有一个get方法,返回任意类型的结构,别人调用我我返回一个Future,通过get方法返回真正的结果。
  3. FutureService:桥接起来,不想调用call就返回Future,一个submit方法,返回值为Future泛型,参数为FutureTask泛型。
  4. AsyncFuture:implements Future。
  • 总结:就是直接返回一个对象先相当于小票,然后调用这个对象的get方法,返回耗时操作的真正结果。

-------------------------------------------------------------21-----------------------------------------------------------------------------------------------

代码:

java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23

角色:

Future:代表的是未来的凭据

FutureTasK:调用逻辑进行隔离

FutureService:桥接的作用 不用知道前两者的存在

问题:get也是阻塞的。假如时间漫长了也会阻塞的。   

-------------------------------------------------------------22------------------------------------------------------------------------------------------------

问题:

java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23

 volatile:可见性(高速缓存一致性协议)和有序性(通过内存屏障)。

java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23加volatile则成员变量的对象的new一定在主对象之前。

用法:

1.标志位

2.防止内存重排序

3.共享变量---主要是防止内部的重排序的

4.基本变量的赋值和读取是原子性的

java并发编程实战wwj----------------------第二阶段-------Future框架-------21-22-23

volatile:https://www.jianshu.com/p/ef8de88b1343

-------------------------------------------------------------23-------------------------------------------------------------------------------------------------