zoukankan      html  css  js  c++  java
  • java 延时队列使用

    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.concurrent.DelayQueue;
    import java.util.concurrent.Delayed;
    import java.util.concurrent.TimeUnit;
     
    /**
     * @description: 延时队列测试
     * @author: hh
     */
    public class DelayedQueneTest {
     
        public static void main(String[] args) throws InterruptedException {
            Item item1 = new Item("item1"5, TimeUnit.SECONDS);
            Item item2 = new Item("item2",10, TimeUnit.SECONDS);
            Item item3 = new Item("item3",15, TimeUnit.SECONDS);
            DelayQueue<Item> queue = new DelayQueue<>();
            queue.put(item1);
            queue.put(item2);
            queue.put(item3);
            System.out.println("begin time:" + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
            for (int i = 0; i < 3; i++) {
                Item take = queue.take();
                System.out.format("name:{%s}, time:{%s} ",take.name, LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
            }
        }
     
    }
     
    class Item implements Delayed{
        /* 触发时间*/
        private long time;
        String name;
     
        public Item(String name, long time, TimeUnit unit) {
            this.name = name;
            this.time = System.currentTimeMillis() + (time > 0? unit.toMillis(time): 0);
        }
     
        @Override
        public long getDelay(TimeUnit unit) {
            return time - System.currentTimeMillis();
        }
     
        @Override
        public int compareTo(Delayed o) {
            Item item = (Item) o;
            long diff = this.time - item.time;
            if (diff <= 0) {// 改成>=会造成问题
                return -1;
            }else {
                return 1;
            }
        }
     
        @Override
        public String toString() {
            return "Item{" +
                    "time=" + time +
                    ", name='" + name + ''' +
                    '}';
        }
    }
     
     
     
  • 相关阅读:
    使用者自订控件 / User Control
    File 与 Log #1ASP.NET的档案与I/O Stream(为系统记录Log文件)
    JavaScript + ASP.NET
    [VB][ASP.NET]FileUpload控件「批次上传 / 多档案同时上传」的范例
    Android开发之道(4)程序框架基础
    虚拟机网络设置
    POST 模拟登陆
    android 面试二
    SSCANF 正则表达式
    android 之 @ 与? 的区别
  • 原文地址:https://www.cnblogs.com/hellohero55/p/13698180.html
Copyright © 2011-2022 走看看