ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java的基本汇合

2020-06-18 10:07:24  阅读:209  来源: 互联网

标签:基本 java 一个 轮询 渠道 任务 执行 对应 汇合


的解决思路是:

首先,给每个渠道定义一个对应的任务,这个任务要完成的就是轮询数据库中所有该渠道的订单并进行处理,使用Map作为渠道的任务池。有了任务,还得让它跑起来呀,而且还不能让它无限制的运行,所以考虑用Future<Boolean>来给每一个任务定时,所以把前面的梳理一下,我们要把每个渠道的任务,以及每个任务的一次执行对应起来(读者可以先想想你们会用到什么数据结构来把这三者存储起来)。

但我们总共有十个任务呢,如果让它们各自运行那岂不是像一盘散沙吗,所以我们还需要一个任务调度器,这个任务调度器负责把不同的渠道对应的任务添加进任务池,然后轮询任务池,并执行任务池中的任务,同时还要把每个任务的每次执行存储起来,方便我们对它们进行监测,防止有任务无限执行下去。

最后,我们的十个任务也不需要时刻运行,每十分钟触发一次。所以我们还需要一个任务触发器,每十分钟启动一次任务。

 

好了,思路终于理清了,再来进行具体的设计

1.先设计数据结构,用一个嵌套的Map来把渠道---任务---执行结果对应起来

Map<String, Map<? extends Callable<Boolean>,Future<Boolean>>>

2.给每一个渠道定义一个Task,实现Callable<Boolean>接口,完成向对应渠道发起校验以及过期检测的任务;

3.写一个TaskDispatcher类(正确的设计方式其实是定义一个接口,里面添加流程中涉及到的方法声明,然后让这个类实现这个接口),在里面实现添加如下几个方法:

这个方法用来向任务池中添加渠道对应的任务

/执行对应渠道的任务,并获取任务执行的Future<Boolean>存储起来

pollTasks(){} //轮询任务池中的所有任务,并执行它们

4.写一个任务触发器,每十分钟启动一次所有任务。

ps:写到这里我突然想到,如果我们不需要关心任务执行的结果,只需要知道它有没有在规定的时间执行完,我们完全可以把把任务结果独立拉出来放在一个List中,然后另起一个任务轮询List中的所有任务结果,如果发现没有再规定时间内完成的则结束它们。这样我们就免去了把渠道---任务---执行结果对应起来的大麻烦。

 

接下来撸代码的时候遇到这样一个问题,我首先定义了任务池

标签:基本,java,一个,轮询,渠道,任务,执行,对应,汇合
来源: https://www.cnblogs.com/bk1166/p/13156034.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有