`
QING____
  • 浏览: 2255210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DelayQueue测试

    博客分类:
  • JAVA
 
阅读更多

DelayQueue是用于可被延迟操作的队列,在ScheduledThreadPoolExecutor中使用..经常用来设计"定时消费"的队列,即提供了对queue中成员按照"过期"时间排序能力,从queue中获取的成员必将是离超时最近的;此外DelayQueue是支持并发的,它内部实现非常简单:ReentrantLock + PriorityQueue;

如下为自己测试类.

 

public class DelayQueueTest {
/**
 * @param args
 */
	public static void main(String[] args) {
		DelayQueue<DelayedItem> queue = new DelayQueue<DelayedItem>();
		for(int i = 0; i<5; i++){
			queue.add(new DelayedItem(System.currentTimeMillis() - i * 1000));
		}
		DelayedItem item = null;
		while((item = queue.peek()) != null){
			System.out.println("...." + item.getTime());
			if(item.getDelay(TimeUnit.MILLISECONDS) <= 0){
				queue.poll();
			}
		}
		System.out.println("End,queue size is :" + queue.size());
	}

	public static class DelayedItem implements Delayed{
		private long time;
		DelayedItem(long time){
			this.time = time;
		}
		public long getTime() {
			return time;
		}
		@Override
		public long getDelay(TimeUnit unit) {
			return unit.convert(time - System.currentTimeMillis(),TimeUnit.MILLISECONDS);
		}
		@Override
		public int compareTo(Delayed o) {
			if(o instanceof DelayedItem){
				DelayedItem di = (DelayedItem)o;
				if(time > di.getTime()){
					return 1;
				}else if(time == di.getTime()){
					return 0;
				}else{
					return -1;
				}
			}
			throw new RuntimeException("State Error!");
		}
	}
}

 

 

分享到:
评论

相关推荐

    Java企业版中性能调节的最佳实践.pdf

    - **Gatling**:基于Scala和Akka的现代负载测试框架,适合高性能和大规模的负载测试场景。 #### 四、软件栈中的组件调优 软件栈通常包括操作系统、Java虚拟机(JVM)、应用容器和应用架构等部分。每个组件都有其独特...

    redis实现简单队列

    在测试代码中,使用了多个并发任务(线程)向名为 "test1" 的队列中插入不同前缀的值。这模拟了多生产者同时向队列中添加任务的场景。每个任务都会插入一定数量的元素,这样可以展示 Redis 队列处理高并发的能力。 ...

    Go-delay-queue基于Redis实现的延迟队列

    同时,它可能还包含了单元测试和示例用例,帮助开发者理解和使用这个延迟队列。 总的来说,这个Go延迟队列项目结合了Go语言的并发优势和Redis的数据结构特性,提供了一种灵活、可扩展的解决方案,适用于各种需要...

    基于Linux的USB摄像头视频采集+编码+发送

    你可以使用像VLC这样的媒体播放器进行测试。 总结,"基于Linux的USB摄像头视频采集+编码+发送"是一个涉及多个技术栈的项目,包括设备驱动、视频编码、流媒体协议等。理解并掌握这些组件及其交互是实现这一目标的...

    java并发编程

    使用API实现压力测试、 CyclicBarrier与Exchanger、 线程池的意义及自定义注意事项、 DelayQueue实现对象的超时管理、 Lock的应用场景及锁分解机制、 自定义堵塞行为的应用、 非阻塞的同步算法、

    Live555 学习笔记

    - 这种方式适合快速构建并测试Live555的基本功能,对于那些希望迅速上手的开发者来说是一个不错的选择。 - **使用Visual C++进行编译**: - 尽管Live555自带的脚本能够生成Visual C++的Makefile文件(通过`...

    并发容器——BlockingQueue相关类

    4. **DelayQueue**:延迟队列,允许元素在特定时间之后才能被获取。元素必须是`Delayed`接口的实现,它提供了获取延迟的时间的方法。 5. **SynchronousQueue**:实际上不是一个真正的队列,它不存储元素。每个插入...

    基于Netty+SpringBoot+LevelDB实现的高性能、高可靠性的消息队列+源代码+文档说明

    1.延迟消息BUG:延时消息基于jdk自带的delayQueue实现,系统宕机重启后服务端读取leveldb中的消息后将消息重新放回延时队列,会重新设置到期时间。例如:设置一条消息5分钟后推送,中途系统宕机,系统重启后会从当前...

    RabbitMQ延时消息实现方案

    2. 建立延时队列(delayqueue)。配置时要留意以下几点: - 配置队列名字时,建议使用delay.{time}.queue的命名规则以便排序和权限控制。 - 根据需要设置不同的延时时间对应的队列,如delay.1m.queue、delay.5m....

    redis-stream-vscode:欢迎使用 vscode 的 redis 流扩展!

    MQ通过redis流,可以delayQueue: 。 使用: npm i redis-stream-queue __keyevent@5__:expired消息( __keyevent@5__:expired )不丢失 易于使用的 GUI 来访问 Redis 流数据。 redis流上MQ的测试数据 键使用扫描,流...

    邮件发送 poi 二维码 条形码等java常用的工具类

    delayqueue:java自带延迟对了使用包 DelayMsg:延迟消息实体 DelayMsgHandler:延迟消息处理工具 paramvalid:空参检查包 CommonUtil:空参检查工具类 ParamNotNull:参数注解 RegistParam:参数实体 ...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段36讲、自定义个简单的线程池并且测试.mp4 │ 高并发编程第一阶段37讲、给线程池增加拒绝策略以及停止方法.mp4 │ 高并发编程第一阶段38讲、给线程池增加自动扩充线程数量,以及闲时自动回收...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段36讲、自定义个简单的线程池并且测试.mp4 │ 高并发编程第一阶段37讲、给线程池增加拒绝策略以及停止方法.mp4 │ 高并发编程第一阶段38讲、给线程池增加自动扩充线程数量,以及闲时自动回收...

Global site tag (gtag.js) - Google Analytics