zoukankan      html  css  js  c++  java
  • 利用多线程解决多业务不同定时区间歇触发问题的一种方法

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

    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.为了连接池能被共享,对连接池所在类进行单例模式。

     

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

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

                                            

  • 相关阅读:
    企业老板怎么获得战略视野及组织管理能力?看这些管理书籍就行 了
    公司管理者必读的5本经典书籍推荐
    如何提升自己的领导能力?
    如何培养自己的商业思维能力?
    口才训练书籍推荐
    公司管理课程,我推荐12Reads系列
    比较好的管理学书籍推荐
    如何自学企业管理?你需要看这些书
    DMZ主机实现
    inotify+rsync实现文件即使备份
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/4493334.html
Copyright © 2011-2022 走看看