java的基本汇合

Posted bk1166

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的基本汇合的主要内容,如果未能解决你的问题,请参考以下文章

NSOJ 飞船汇合(经典)

在汇合中更改内联等宽代码的格式以使其脱颖而出

异步汇合

UML学习——活动图

汇合:Hdfs 沉入 avro 格式,但在 hive 中读取 avro 文件时,我的时间比“时区”提前 5:30 小时:“亚洲/加尔各答”

Java中的基本类型与非基本类型