博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用多线程解决多业务不同定时区间歇触发问题的一种方法
阅读量:5993 次
发布时间:2019-06-20

本文共 785 字,大约阅读时间需要 2 分钟。

 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:。

1.背景

项目中需要解决一个这样的问题:有两个业务均需要每隔几秒触发一次,但是两个业务都只是在规定的时间区域内才进行该行为。比如,在早上八点到晚上六点为上班时间,在这个时间段内两个业务必须每隔几秒被执行一次,下班后则停止工作。

2.思路

这个问题最开始我是想利用timer来解决,即做两个timer,一个timer来控制一个事务,然后在各事务对应时间区域内执行。

但是考虑到Timer是在主线程里执行的,Thread 是在自己的线程中执行的,在多核多线程的 CPU 中,利用Thread的效率高更高一些。而且后期事务变多,控制更复杂,用timer也不是很利于扩展。所以最后决定使用多线程来解决该问题。

经过思考以及参阅类似案例,比如http://www.cnblogs.com/shuang121/archive/2012/07/05/2578033.html,最后将框架设计成如下结构:

                       

3.具体实现

3.1 IshedulerJob

 

3.2 Job

 

3.3SchedulerConfiguration

 

3.4Scheduler

 

3.5 viewer

 

4. 优化

a.两个事务均涉及到数据库的多数据增删查改,为了保证数据的唯一性,对数据库操作均采取事务型操作。

 

b.为了避免数据库的重复连接和关闭,这里尽量使用数据库的长连接。同时,为了避免两个事务共用一个数据库连接而出现的问题,特地使用简单的数据库连接池进行处理。

 

c.为了连接池能被共享,对连接池所在类进行单例模式。

 

 

                                                                                     -----欢迎转载,但保留版权,请于明显处标明出处:

                                                                                   如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                        

你可能感兴趣的文章
Java调用oracle存储过程通过游标返回临时表数据
查看>>
Jmeter接口测试图文示例
查看>>
工作总结 datatable 里的 数据 rows Columns
查看>>
深入解读Service Mesh背后的技术细节
查看>>
002-自定义打开terminal,以及快捷键,其他程序类似,ssh管理-sshpass, Shuttle
查看>>
Linux驱动面试题
查看>>
做了公众号为什么还要做小程序
查看>>
tp框架中的一些疑点知识-7
查看>>
OpenCV学习记录之摄像头调用
查看>>
spring mvc:练习 @RequestParam(参数绑定到控制器)和@PathVariable(参数绑定到url模板变量)...
查看>>
c# 选择排序
查看>>
[Machine Learning] 浅谈LR算法的Cost Function
查看>>
php实现 明明的随机数
查看>>
Guava中针对集合的 filter和过滤功能
查看>>
小程序顶部导航栏的自定义
查看>>
ZooKeeper系列(3):znode说明和znode状态
查看>>
Java Arrays.sort源代码解析
查看>>
使用buildroot创建自己的交叉编译工具链【转】
查看>>
使用superlance插件增强supervisor的监控能力
查看>>
Dcloud课程7 单例模式一般用在什么场景
查看>>