利用多线程解决多业务不同定时区间歇触发问题的一种方法 1.背景 2.思路 3.具体实现 4. 优化

 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

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

2.思路

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

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

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

     利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化                  

3.具体实现

3.1 IshedulerJob

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

3.2 Job

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

3.3SchedulerConfiguration

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

3.4Scheduler

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

3.5 viewer

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

4. 优化

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

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

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

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

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

 利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化

                                                                                     -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

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

                                        利用多线程解决多业务不同定时区间歇触发问题的一种方法
1.背景
2.思路
3.具体实现
4. 优化