建议学习时,打开代码https://gitee.com/tianyalei/asyncTool 对着代码看。
上一篇主要讲了如何实现异步回调,简单回忆一下是如何实现的。java的future的get方法是同步阻塞的,无法达到任务完成后主动回调的目的。netty的future是可以做到回调的,通过addListener的方式,但是为什么addListener后就能回调了,也是通过封装执行单元和回调类的方式,即上一篇的wrapper模式。
如果比较难以看懂,最好是自己手写一下,创建wrapper,将执行单元和回调类都包装到wrapper里。
这一篇依旧是有点难度的,我们主要学习多个执行单元之间的相互依赖模型是如何建立并工作的。
还拿这个图举例,可以看到每个执行单元彼此间是有相互依赖关系的。
如图1,B必须在A完成后才能执行,C必须在B完成后才能执行。也就是B depends A,他们之间有个depends的关系,而且是强依赖。
如图4,A依赖于B、C,这里就分不同情况了。第一种情况,A强依赖于B、C,必须B and C都完成后才能执行A;第二种情况,A强依赖于B、弱依赖于C,如果仅仅是C完成了,B还未完成,那么A不会执行,必须B完成了,A才会执行(此时就不在乎C是否完成了);第三种情况,A弱依赖于B、C,无论B或C中的哪个先执行完,A都会开始执行,而不去等待其他的依赖项。
猛的看起来,要实现这有点难,其实等会经过我仔细分析后,就会发现并不难。
从上一