规则实体包含创建时间和生存时间,
比如说,我在10:30新增一条规则A,他的生存时间是半小时,
那么在11:00的时候,需要执行让这条规则失效的操作。这个需求,我的有2种思路,
一是使用定时任务,二是使用线程计时。问题是如果半小时内创建了近W条规则,那必须启动近W个定时任务或启动近W个线程,
那cpu的占用不可想象的。有没有更好的点子?

解决方案 »

  1.   

    显然没啥必要这么干去研究下Java自带的Timer的实现机制吧,是个不错的典范。
      

  2.   

    quartz试试!
      

  3.   


    近W的任务没测过,只是建议你研究下Timer的实现机制,而不是直接启动近W个线程,如果你直接启动近W个线程,操作系统会把大多数CPU时间浪费在线程切换上面了。Timer的机制是做了排队,它就靠一个主线程做调度,大致是每次计算“最近即将执行”任务的执行时间点,然后计算当前时间距其的间隔;然后以此来sleep,时间到了就开始调度。
    主体思路可借鉴此,因为你所拥有的是规则,而不直接是任务,所以你可以先不创建任务,时间点到了,再根据规则来创建任务。不过你仍然将面临一个难点:近万规则如何快速定位“最近即将执行”,每次都全部轮询一遍是不合理的。这恐怕就得从规则的特征入手来考虑一个让其能快速保持有序的方法了。
      

  4.   

    用JAVA自带的Timer,比自己启很多线程好
      

  5.   


    哦,其实不需要轮询的,我的需求实际就是新建规则的同时,注册一个让他定期失效的任务就可以了。
    如果Timer的定时任务机制是单线程,那确实能解决我的问题了。