我是靠谱客的博主 含蓄红牛,最近开发中收集的这篇文章主要介绍Timer定时器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

以下所有的task都是TimerTask的子类

 所有time都是Date类型的日期
 所有delay和period都是long类型的延迟时间, 单位为毫秒
 timer.schedule(task, time);                    在time时间执行task任务1次
 timer.schedule(task, delay);                在延迟delay毫秒后执行task任务1次
 timer.schedule(task, firstTime, period);    在firsttime时间执行task1次,之后定期period毫秒时间执行task,    时间如果为过去时间, 不会执行过去没有执行的任务, 但是会马上执行
 timer.schedule(task, delay, period);        在延迟delay后执行task1次,之后定期period毫秒时间执行task,     时间如果为过去时间, 不会执行过去没有执行的任务, 但是会马上执行
 timer.scheduleAtFixedRate(task, firstTime, period);        在firstTime时间执行task一次, 以后每隔period毫秒执行1次, 时间如果为过去时间, 会执行过去没有执行的任务, 但是会马上执行
 timer.scheduleAtFixedRate(task, delay, period);            在delay毫秒后执行task一次, 以后每隔period毫秒执行1次, 时间如果为过去时间, 会执行过去没有执行的任务, 但是会马上执行

实际应用方法,根据需求进行更改

if (!timeTask){//启动定时任务,2小时一次把缓存数据写入数据库
            timeTask = true;
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    log.info("Redis 数据写入数据库,二十分钟一次---开始");
                    List<TCommentLike> all = TCommentLike.dao.findAll();
                    HashMap<String, String> map = new HashMap<>();
                    for (TCommentLike like : all) {
                        map.put(String.valueOf(like.getLikedId())+like.getLikeId(),like.getStatus()+"_"+like.getId());
                    }

                    //投诉类型,点赞
                    for (String key : Redis.use().keys("LIKE_Complaint*")) {
                        String s1 = getSplitNum(key, 3);
                        String s2 = getSplitNum(key, 4);
                        String value = Redis.use().get(key);//Strings,value内存储点赞时间
                        TCommentLike like = new TCommentLike();
                        like.setLikedId(Integer.valueOf(s1));
                        like.setLikeId(Integer.valueOf(s2));
                        like.setType("0");
                        like.setStatus("0");
                        like.setCreateTime(formatter.parse(value,new ParsePosition(0)));
                        String s = map.get(s1 + s2);
                        if (StrKit.notBlank(s) && "1".equals(getSplitNum(s,1))){
                            like.setId(Integer.valueOf(getSplitNum(s,2)));
                            like.update();
                        }else if (StrKit.isBlank(s)){
                            like.save();
                        }
                        String num = Redis.use().get("LIKE_Num_Complaint_" + s1 );
                        if (num != null){
                            TComplaint.dao.updateLikeNum(Integer.valueOf(s1), Integer.valueOf(num));
                            Redis.use().del("LIKE_Num_Complaint_" + s1);
                        }
                        Redis.use().del(key);
                    }
                
                    log.info("Redis 数据写入数据库,二十分钟一次---结束");
                }
            }, 1200000 , 1200000);//60000 = 1分钟
            // 在延迟delay后执行task1次,之后定期period毫秒时间执行task,
            // 时间如果为过去时间, 不会执行过去没有执行的任务, 但是会马上执行
        }

最后

以上就是含蓄红牛为你收集整理的Timer定时器的全部内容,希望文章能够帮你解决Timer定时器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部