`
xinklabi
  • 浏览: 1590806 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

DelayQueue (ScheduledThreadPoolExecutor调度的实现)

    博客分类:
  • Java
 
阅读更多

    使用实现ScheduledThreadPoolExecutorTimer(定时线程池)将会有各种各样的问题(可以参考《JAVA并发编程实践》第6.2章节),ScheduledThreadPoolExecutorTimer使用了DelayQueue来进行调度,它是BlockingQueue的实现,你也可以使用它来进行构建自己的定时任务调度框架。

    DelayQueue管理着一个包含Delayed对象的容器,每个Delayed对象都与一个延迟时间相关联,只有在元素过期后,DelayQueue才让你能执行take操作获取元素。从DelayQueue中返回的对象将依据它们所延迟的时间进行排序。

 

public class DelayQueue<E extends Delayed>extends AbstractQueue<E>implements BlockingQueue<E>

 

Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部 是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且 poll 将返回 null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于等于 0 的值时,将发生到期。即使无法使用 takepoll 移除未到期的元素,也不会将这些元素作为正常元素对待。例如,size 方法同时返回到期和未到期元素的计数。此队列不允许使用 null 元素。  

分享到:
评论
1 楼 乱在长安 2015-08-07  
使用Timer会有各种各样的问题好嘛?!书上推荐使用ScheduledThreadPoolExecutor!

相关推荐

    DelayQueue延迟队列和Redis缓存实现订单自动取消功能

    这个特性使得DelayQueue成为实现定时任务和延迟操作的理想工具。在电商系统中,例如订单管理,这种功能非常有用,比如自动取消未付款的订单。 DelayQueue的核心接口是`java.util.concurrent.Delayed`,实现这个...

    DelayQueue、Redis结合使延迟、定时任务使用源代码

    本文将深入探讨如何利用Java中的`DelayQueue`和Redis来实现这一功能。`DelayQueue`是Java并发库`java.util.concurrent`中的一个数据结构,它是一个基于优先级队列的无界阻塞队列,可以用于存储具有延迟时间的元素。...

    Java多线程并发开发之DelayQueue使用示例

    1. 任务调度:DelayQueue可以用于实现任务调度系统,按照任务的延迟时间来排序,以便在合适的时刻执行任务。 2. 网络编程:DelayQueue可以用于实现网络编程中的延迟处理,例如在网络游戏中,DelayQueue可以用于实现...

    DelayQueue

    学习视频,可以丰富java知识。能够获得更多的专业技能

    JDK自带的延迟队列-DelayQueue

    `DelayQueue`是一个基于优先级队列(PriorityQueue)实现的无界阻塞队列,它的主要特性是元素只有在达到指定延迟时间后才能被消费。这种队列常用于实现定时任务调度、缓存过期策略等场景。 1. **延迟元素的概念** ...

    DelayQueue的使用以及注意事项

    DelayQueue的使用以及注意事项,这里需要由BlockingQueue的基本知识,一般的Queue的使用方法poll(),take(),drainTo()和offer(),put()这些应该懂。

    springboot执行延时任务之DelayQueue的使用详解

    DelayQueue的元素需要实现Delayed接口,该接口类定义如下: public interface Delayed extends Comparable&lt;Delayed&gt; { / * Returns the remaining delay associated with this object, in the * given time ...

    java利用delayedQueue实现本地的延迟队列

    DelayedQueue 的实现是基于 Java 中的阻塞队列的接口 BlockingQueue, DelayQueue 是其的一种实现。 DelayQueue 提供了一个无界的阻塞队列,用于存放实现了 Delayed 接口的对象。 DelayQueue 能够保证队列中的对象...

    定时任务与线程池:并发编程的关键

    DelayQueue内部实现了一个基于时间优先级的PriorityQueue,保证任务能按计划时间顺序执行。文档还详细描述了任务如何在工作线程中被执行和重新安排。此外,文档探讨了ScheduledFutureTask类,它是任务调度的核心,...

    高效的实现队列

    例如,在操作系统中,进程调度就是基于优先级队列实现的;在消息中间件中,消息通常存储在队列中,等待消费。 总之,高效地实现队列需要考虑到性能、内存利用率、线程安全等因素,具体实现方式取决于应用场景和需求...

    delay-queue:JDK实现的本地delayQueue和基于分布式Redis的两种分布式

    local delayQueue implemented by JDK & two kinds of distributed delayQueue based redis 1. 基本介绍 RedisSynDelayQueue 基于redis,并发情况下会加分布式锁,单线程场景(syn=false)性能较好, 并发场景性能较...

    高效延时队列的设计与实现

    DelayQueue是一个基于优先级队列的数据结构,插入的元素必须实现Delayed接口,通过getDelay方法返回剩余延迟时间。当延迟时间到达零时,元素才能被消费。 RabbitMQ实现延时队列的基本原理: RabbitMQ结合消息的TTL...

    集合常见面试题

    hashmap如何解决hash冲突,为什么hashmap中的链表需要转成红黑树? hashmap什么时候会触发扩容? jdk1.8之前并发操作...LinkedBlockingQueue、DelayQueue是如何实现的? CopyOnWriteArrayList是如何保证线程安全的?

    php-delayqueue:基于redis实现高可用,易拓展,接入方便,生产环境稳定运行的延迟队列

    4.实现通知失败,1,3,5,7分钟重复通知,直到对方回复? 通常解决以上问题,最简单直接的办法就是定时去扫表。 扫表存在的问题是: 1.扫表与数据库长时间连接,在数量量大的情况容易出现连接异常中断,需要更多的...

    基于DelayQueue的简单的定时任务队列.zip

    基于DelayQueue的简单的定时任务队列.zip Quick Start class Main { public static void main(String[] args) { // 初始化任务队列 JobScheduler scheduler = new JobScheduler("default"); // 向队列中提交任务...

    Delayed interface and Delay Queue

    通过这个示例,读者可以学习如何利用Delayed接口和DelayQueue来实现延迟任务调度,这在很多场景中都非常有用,比如定时任务、缓存过期策略等。 总结来说,Delayed接口和DelayQueue是Java并发编程中实现延迟处理的...

    基于Redis实现的延迟消息队列

    #### 整体结构 整个延迟队列由4个部分组成: 1. JobPool用来存放所有Job的元信息。 2. DelayBucket是一组以时间为维度的有序队列,用来存放所有需要延迟的Job(这里只存放Job Id)。 3. Timer负责实时扫描各个...

    基于SpringBoot的延迟消息Starter设计源码,支持DelayQueue、Redisson、RabbitMQ三种方式

    该项目是SpringBoot框架下的延迟消息Starter,提供对DelayQueue、Redisson和RabbitMQ三种延迟消息机制的集成支持。项目包含32个文件,涵盖24个Java源文件、4个XML配置文件、1个Git忽略文件、1个Markdown文件、1个...

    Java定时任务

    虽然它们不直接支持定时任务,但可以通过组合使用ScheduledExecutorService和DelayQueue等工具实现定时任务的调度。 在实际应用中,Java定时任务广泛用于数据同步、日志清理、统计分析、系统监控等场景。例如,你...

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

    源码可能包含了任务的创建、调度、消费等接口,以及与Redis交互的具体实现。同时,它可能还包含了单元测试和示例用例,帮助开发者理解和使用这个延迟队列。 总的来说,这个Go延迟队列项目结合了Go语言的并发优势和...

Global site tag (gtag.js) - Google Analytics