有没有什么定时执行的好方案

现在有这么一个需求,例如我唱歌,买了一个时段的,到点要主动给停止掉,现在我用笨的办法,就是写一个定时任务,一分钟查询次,循环查询,看哪个时间到了,然后提醒,但是感觉这样写性能很不好,如果没有到时间的也得去循环查,有没有主动去提醒的,到时间就直接执行通知,不用一直循环去查,或者有什么别的好的方案,求分享!

阅读 3.7k
6 个回答

用延迟消息队列, 时段开始时往延迟队列写入一条消息, 到点时通知应用处理。

加一个过期时间字段,然后让前端执行判断逻辑及后续操作

用Timer吧,可以在某个时间执行的(可以传一个具体的时间)

public static void main(String[] args){
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime());
        calendar.add(Calendar.SECOND,3);//当前时间3秒后

        Timer timer = new Timer();
        //timer.schedule(任务,时间)
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                //业务代码
                System.out.println(calendar.getTime());
                timer.cancel();
            }
        },calendar.getTime());
    }

clipboard.png

把时间换成你想要的时间吧,如果你想要每天都执行,可以考虑把这些代码写在循环里,每次时间加一天?

加事件监听,设置计时器,到点执行stop操作

time定时少不了的,无论是订时还是缓存过期,都需要时间对比。BS是无状态的。
除非使用websocket来,将开始时间发到缓存,后端来定时跑,一旦时间到,就广播用户。

新手上路,请多包涵

我这里有个springMVC定时器的任务,不用循环,你可以设定具体时间,到你设定的时间就执行,给你看一下源码

   //@Scheduled(cron = "0/20 * * * * ?")//每20秒跑一次
    // @Scheduled(cron = "0 0 7 * * ?")//每天早上七点运行一次
    @Scheduled(cron = "0 0 5,20,23 * * ?")//一天跑三次(防止阿里云服务器维护) 每天早上五点 下午八点 晚上十一点都跑一次
    public void run() {
        try {
            System.out.println("运行了定时任务....");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题