问题大概是这样的:一个类似12306的订票系统,我们首先确定提交订单,加入我买了一张票,系统提示:您的订单已经被锁定。现在假如我不支付。这样的话,那这条订单就会在提示的锁定时间内被售票系统锁定。我的实现方法是这样的,我新增一个timer单例,在这个timer单例上我将每一条未支付的订单都加在一个timertask上,挂在timer的任务队列中。根据票被锁定时间,设置该条task被执行延迟时间。我有几个个疑问就是:1、假如我往timer的任务队列中加入过多的task,这个timer会不会因为某一个task执行出现问题,而导致阻塞。2、某些task执行时间过长,会不会出现后续的都增加延迟,导致延迟越来越大,如果这样的系统常年累月运行的话,会不会出现严重问题。不知道大家能不能从我的只言片语中理解我所说的这个案例的大致情况,希望有javaSE了解多的人能指点迷津先谢过了

解决方案 »

  1.   

    Timer是单线程的,你说的问题都可能出现,并且还有其他一些问题,譬如Timer的线程因为受调度任务的异常而死掉,很可能Timer就挂掉了,so,强烈建议在jdk1.5及以后放弃Timer,转投Executors.newScheduledThreadPoolhttp://www.ticmy.com/?p=82
      

  2.   

    非常感谢您能有耐心回复我,谢谢。
    现在任务调度框架挺多的,cron4j不知道你了解过或者用过没,他怎么样啊?
    不过到目前为止,我觉得ScheduledThreadPoolExecutors已经可以部分满足我的需求了
    我想对任务队列进行详细控制,但他不保证getqueue的队列是按照时间先后排列的。
    这样的话我就要对任务队列进行排序,当然,我自己创建一个任务队列
    但我发现一个问题,就是他没有对未成功执行的任务提供接口,这样我就不知道哪些任务没有被成功执行啊