super.run();
try {
// 模拟随机时间
Random random = new Random();
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
// 第三方框架内部使用同步加载
// completeDAGTask方法写在run方法末尾即可
completeDAGTask();
}
// 第三方框架内部使用异步加载
// completeDAGTask方法需要写进成功回调
/*onLibrarySuccess(){
completeDAGTask();
}*/
tips:加载任务内部未开线程,completeDAGTask方法写在run方法的末尾,感知初始化结束;加载任务内部使用多线程,需要将completeDAGTask方法写进加载成功回调 。
第三步,根据任务的依赖关系构建DAGProject并执行 。
回首一开始出现的复杂依赖关系:
文章插图
我们模拟对应的任务,任务A、B、C、D、E,构建DAGProject如下:
ATask a = new ATask("ATask");
BTask b = new BTask("BTask");
CTask c = new CTask("CTask");
DTask d = new DTask("DTask");
ETask e = new ETask("ETask");
DAGProject dagProject = new DAGProject.Builder()
.addDAGTask(b)
.addDAGTask(c)
.addDAGTask(a)
.addDAGTask(d)
.addDAGTask(e)
.addDAGEdge(b, a)
.addDAGEdge(c, a)
.addDAGEdge(d, b)
.addDAGEdge(d, c)
.addDAGEdge(e, b)
.builder();
DAGScheduler dagScheduler = new DAGScheduler();
dagScheduler.start(dagProject);
依赖任务执行结果如下:
文章插图
可以看到依赖任务被拆开成A、C、B、E、D的顺序进行执行 。
/ 结语 /
行文至此,总算凑到了结尾,1202年了,居然还有人在用JAVA写客户端 。
框架实现整体很简单,但还是踩了很多坑,大到框架整体应该如何实现,小到设计模式应该如何使用、对外应该暴露什么方法、maven central如何上传等等各种细节问题,综上,这是一篇很青涩的文章 。中途参考了很多大佬的文章思路和美好意见,但还是很不足,欢迎大佬们下场one one指导 。
最后贴一下github链接:
https://github.com/LING-0001/DAGTask
推荐阅读
- 别在Python中使用“+”来连接字符串了,还有更好用的方法
- 汪东城|国庆假期最尴尬的明星!明星向网红求合照,却被误以为是粉丝一把推开
- 李诞|除了谐音梗内部梗,李诞还有一个曾经反感的元素,第五季频繁出现
- 流量明星|凌晨4点拍戏、接不孕广告,这6位童星被父母当摇钱树,有人8岁便去世
- 怀孕喝矿泉水有影响吗
- 孕妇擦艾叶水有危害吗
- 赵匡胤的老婆有哪几位,太祖赵匡胤的妻子-
- 唐朝到底有多强,唐朝强大吗-
- 世界上最大的鲶鱼是什么,世界上最大的鲶鱼到底有多大-
- 卷发|?韩国最重要的电影节红毯,有人出糗有人惊艳,60岁梁朝伟一骑绝尘!