zoukankan      html  css  js  c++  java
  • Queue 阻塞队列 DelayQueue


    package
    com.dh.learn.queue; import java.util.concurrent.DelayQueue; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit; public class LearnDelayQueue { // DelayQueue 只能放置实现了Delayed接口的元素 底层使用的是PriorityQueue //1. 在put时加了ReentrantLock,保证线程安全,由于是无界队列,在put时不会发生阻塞 //2. 在take时,根据每个Delayed元素的延时,利用Condition去await对应的时间,直到Delayed元素的延时为0时,就可以取出元素了。 public static void main(String[] args) { DelayQueue<MyDelay> delayQueue = new DelayQueue<>(); delayQueue.put(new MyDelay("111")); delayQueue.put(new MyDelay("222")); delayQueue.put(new MyDelay("333")); delayQueue.put(new MyDelay("444")); System.out.println("开始时间" + System.currentTimeMillis()); try { delayQueue.take(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("结束时间" + System.currentTimeMillis()); } static class MyDelay implements Delayed { private String name; private long start = System.currentTimeMillis(); private long time; public MyDelay(String name) { this.name = name; //1s的延时 this.time = 1000; } @Override public long getDelay(TimeUnit unit) { return unit.convert((start + time) - System.currentTimeMillis(), TimeUnit.MILLISECONDS); } @Override public int compareTo(Delayed o) { return 0; } @Override public String toString() { return super.toString(); } } }
  • 相关阅读:
    Android studio中Terminal中使用git(Windows环境)
    快速将JSON转换为bean
    生成apk文件
    Intent显式和隐式使用
    碎片
    ListView的基本用法
    浅谈JSONObject,GSON解析JSON
    浅谈SAX,PULL解析XML
    iOS源代码管理工具
    详解tintColor属性
  • 原文地址:https://www.cnblogs.com/han6/p/11308106.html
Copyright © 2011-2022 走看看