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 + ''' +
                    '}';
        }
    }
     
     
     
  • 相关阅读:
    我们毕业了!!!@全体成员
    华东交通大学编译原理期末试卷
    软件设计师中级下午答题解题策略分析~
    Java实现旅行商最短距离
    基于SSH的医院在线挂号
    基于Java的模拟写字板的设计与实现
    基于java的雷电游戏
    基于Java的飞机大战游戏的设计与实现
    基于Java的超级玛丽游戏的设计与实现
    基于Javaee的影视创作论坛的设计与实现
  • 原文地址:https://www.cnblogs.com/hellohero55/p/13698180.html
Copyright © 2011-2022 走看看