Queue 阻塞队列 DelayQueue
Posted han6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
以上是关于Queue 阻塞队列 DelayQueue的主要内容,如果未能解决你的问题,请参考以下文章
并发编程-concurrent指南-阻塞队列-延迟队列DelayQueue
java同步阻塞队列之DelayQueue实现原理,PriorityQueue原理
多线程-BlockingQueue,Array[Linked]BlockingQueue,DelayQueue,PriorityBlockingQueue,SynchronousQueue