• 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 + ''' +
                    '}';
        }
    }
     
     
     
  • 相关阅读:
    Log4net的一点改进
    SONY的几款秋季新品都还是很不错的
    在VisualStudio 工具箱中隐藏用户控件
    WPF中的DesignMode判断
    SONY的一款Win8平板
    .Net中的不可变集合(Immutable Collection)简介
    C++ 11中几个我比较喜欢的语法(三)
    很好用的谷歌字体以及Gravatar头像一键替换WordPress插件----WP Acceleration for China 插件
    关于微信获取access_token接口,返回值为-1000的问题
    主合同与补充合同的区别有哪些?
  • 原文地址:https://www.cnblogs.com/hellohero55/p/13698180.html
Copyright © 2020-2023  润新知