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;
        }
    }
    

      

  • 相关阅读:
    win10右键在此处打开CMD
    练习1-20 编写程序detab,将输入中的制表符替换成适当数目的空格.
    编写一个程序,打印输入中单词长度的直方图.垂直方向
    王爽 汇编 实验14
    python 文件
    函数和方法
    python-格式化字符串
    MPC&MAGIC
    python-super1
    小知识点
  • 原文地址:https://www.cnblogs.com/tietazhan/p/6632468.html
Copyright © 2011-2022 走看看