三 : DelayQueue 延迟队列
来源:互联网 发布:设计师用的软件 编辑:程序博客网 时间:2024/05/21 10:27
1. 延迟队列 DelayQueue
它是包含Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部 是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且 poll 将返回 null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于等于 0 的值时,将发生到期。即使无法使用 take 或 poll 移除未到期的元素,也不会将这些元素作为正常元素对待。例如,size 方法同时返回到期和未到期元素的计数。此队列不允许使用 null 元素。
该实现类有两个构造函数 , 一个为无参构造函数 , 一个为Collection类的参数。
2. 该实现类的 add 方法
可以看出 ,DelayBlockingQueue实现类的add方法,内部是由优先级阻塞队列实现的。 具体参考优先级阻塞队列
3.该实现类的take方法
4. 代码实现
public class Delay
{
private class Stadium implements Delayed
{
long trigger;
public Stadium(long i)
{
trigger = System.currentTimeMillis() + i;
}
@Override
public long getDelay(TimeUnit arg0)
{
long n = trigger - System.currentTimeMillis();
return n;
}
@Override
public int compareTo(Delayed arg0)
{
return (int) (this.getDelay(TimeUnit.MILLISECONDS) - arg0.getDelay(TimeUnit.MILLISECONDS));
}
public long getTriggerTime()
{
return trigger;
}
}
public static void main(String[] args) throws Exception
{
Random random = new Random();
DelayQueue<Stadium> queue = new DelayQueue<Stadium>();
Demo09 t = new Demo09();
for (int i = 0; i < 5; i++)
{
queue.add(t.new Stadium(random.nextInt(30000)));
}
Thread.sleep(2000);
while (true)
{
Stadium s = queue.take();//延时时间未到就一直等待
if (s != null)
{
System.out.println(System.currentTimeMillis() - s.getTriggerTime());//基本上是等于0
}
if (queue.size() == 0) break;
}
}
}
- 三 : DelayQueue 延迟队列
- 延迟队列DelayQueue
- 延迟阻塞队列DelayQueue
- 延迟队列DelayQueue示例
- 延迟队列 DelayQueue
- 延迟队列 DelayQueue 【JAVA】
- 延迟队列DelayQueue
- 延迟队列DelayQueue的使用示例
- Java并发编程-32-带有延迟元素的队列-DelayQueue
- java并发容器——延迟队列DelayQueue
- Java多线程/并发27、DelayQueue延迟队列模拟实现Session
- 【Java】延迟队列DelayQueue里的坑 concurrent.Delayed
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- 其他阻塞队列DelayQueue&PriorityBlockQueue延迟阻塞队列和优先级阻塞队列
- 编程序找出1000之内的所有完数
- 树中的最长路
- Java常见异常和解决办法
- caffe学习笔记---5 -caffe网络层类型
- iOS 音视频高级编程:Audio Unit播放FFmpeg解码的音频
- 三 : DelayQueue 延迟队列
- 使用impdp导入dmp文件
- 欢迎使用CSDN-markdown编辑器
- UvaLive 4256 Salesman (DP)
- source命令使用的总结
- AngularJS组件化--让开发更简单
- 缓存cache 填充dataset
- java语言调用weka
- 浮点数计算问题