zoukankan      html  css  js  c++  java
  • 延迟队列DelayQueue

    应用场景:有一批广告需要不定时上下架,有可能上下架的时间间隔很长,就没必要用定时器轮询,用延迟队列进行任务执行。

    public class Test2 {
        public static void main(String[] args) throws InterruptedException {
            DelayQueue<Message> delayQueue =  new DelayQueue<>();
            for (int i=1;i<11;i++){
                Message m = new Message(i+"",System.currentTimeMillis()+i*1000);
                delayQueue.add(m);
            }
    
            while(!delayQueue.isEmpty()){
                Message message = delayQueue.take();//此处会阻塞
                //执行广告上下架操作
            }
    
        }
    }
    
    class Message  implements  Delayed{
        private String id;
        private long insertTime ;//开始时间,广告上下架时间。
    
        public Message(String id,long insertTime){
            this.id = id;
            this.insertTime =  insertTime;
        }
    
        //获取失效时间
        @Override
        public long getDelay(TimeUnit unit) {
            //获取失效时间
            return this.insertTime+60000-System.currentTimeMillis();
        }
    
    
        @Override
        public int compareTo(Delayed o) {
            //比较 1是放入队尾  -1是放入队头
            Message that = (Message)o;
            if(this.insertTime>that.insertTime){
                return 1;
            }
            else  if(this.insertTime==that.insertTime){
                return 0;
            }else {
                return -1;
            }
        }
    
        public String getId() {
            return id;
        }
    }
    

      

  • 相关阅读:
    线性代数回顾+深化(未完成版)
    HIT OS2020 Spring Lab2
    选择
    工业互联网
    leetcode-200 岛屿数量
    记网易面试题<二>
    记网易面试题《一》
    leetecode-14-最长公共子串-简单
    leetcode-1012 至少有1位重复的数字
    协程
  • 原文地址:https://www.cnblogs.com/tietazhan/p/6632468.html
Copyright © 2011-2022 走看看