- 浏览: 1340979 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
JDK的延迟队列
方案是利用JDK自带的DelayQueue来实现,这是一个无界阻塞队列,该队列只有在延迟期满的时候才能从中获取元素,放入DelayQueue中的对象,是必须实现Delayed接口的。
List<Order> list;
Order createTime; 延迟30秒,与当前时间比对
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class OrderDelay implements Delayed {
private String orderId;
private long timeout;
OrderDelay(String orderId, long timeout) {
this.orderId = orderId;
this.timeout = timeout + System.nanoTime();
}
public int compareTo(Delayed other) {
if (other == this)
return 0;
OrderDelay t = (OrderDelay) other;
long d = (getDelay(TimeUnit.NANOSECONDS) - t
.getDelay(TimeUnit.NANOSECONDS));
return (d == 0) ? 0 : ((d < 0) ? -1 : 1);
}
// 返回距离你自定义的超时时间还有多少
public long getDelay(TimeUnit unit) {
return unit.convert(timeout - System.nanoTime(), TimeUnit.NANOSECONDS);
}
void print() {
System.out.println(orderId+"编号的订单要删除啦。。。。");
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.TimeUnit;
public class DelayQueueDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("00000001");
list.add("00000002");
list.add("00000003");
list.add("00000004");
list.add("00000005");
DelayQueue<OrderDelay> queue = new DelayQueue<OrderDelay>();
long start = System.currentTimeMillis();
for(int i = 0;i<5;i++){
//延迟三秒取出
queue.put(new OrderDelay(list.get(i),
TimeUnit.NANOSECONDS.convert(3, TimeUnit.SECONDS)));
try {
queue.take().print();
System.out.println("After " +
(System.currentTimeMillis()-start) + " MilliSeconds");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
发表评论
-
服务端推送multipart/x-mixed-replace
2023-12-07 15:26 455往网页分批推送数据:boundary=END,总头--> ... -
使用httpclient提交post请求
2020-08-22 08:35 508import org.apache.http.HttpEnt ... -
Groovy超强的Java动态计算能力
2020-06-25 09:03 720//Groovy超强的Java动态计算能力 groovy-2. ... -
bsh(BeanShell)动态执行java代码
2020-06-25 07:59 1029import java.util.Date; /** * B ... -
HttpsURLConnection
2020-04-29 10:51 890import java.net.URL; import jav ... -
Log4j的ConversionPattern参数的格式含义
2020-04-22 14:23 534Log4j的ConversionPattern参数的格式含义 ... -
thread 的join
2020-04-16 18:02 447java里面也有这个方法,Java Thread中, join ... -
GZIPOutputStream压缩文件
2020-04-16 17:52 820import java.io.BufferedReader; ... -
软引用SoftReference的使用
2020-04-16 15:48 611软引用SoftReference的使用 SoftRefere ... -
Fastjson
2020-04-15 14:53 436import java.util.ArrayList; imp ... -
6位随机数
2020-04-14 09:47 847import org.apache.commons.lang. ... -
Java加密和数字签名
2020-04-14 09:38 449Java加密和数字签名 消息摘要 这是一种与消息认证码结合使 ... -
DES加密、解密
2020-04-02 16:42 463import java.security.SecureRand ... -
Java利用 AES/ECB/PKCS5Padding 算法加解密
2020-04-02 11:19 1100对称加密、解密 import javax.crypto.Ci ... -
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter
2018-12-13 16:04 1424springboot中使用springmvc的拦截器-Hand ... -
aspectj连接点
2018-12-13 15:55 629切点指示符 切点指示符 ... -
spring之AspectJ面向切面编程
2018-12-13 14:15 943spring之AspectJ面向切面编程 面向切面编程,实现 ... -
设计模式之策略模式
2018-05-30 21:17 586public class Person { priva ... -
使用反射将对象转Map
2018-05-27 17:33 761//使用反射将对象转Map<String, St ... -
设计模式之原型模式
2018-05-20 18:42 572/** * 原型设计模式:原型模式主要用于对象的复制 ...
相关推荐
在本文中,我们将深入探讨如何利用PHP实现订单的延时处理,特别是针对订单超时未支付自动取消的业务需求。在实际的电商或在线交易系统中,这种功能是必不可少的,因为它能确保订单状态的准确性和系统的稳定性。 ...
这种机制可以应用于订单状态检查、异步任务调度、缓存失效、预约处理等多个场景中。RabbitMQ并不直接提供延时队列功能,但是可以通过一些配置和策略模拟出延迟消息的功能。 首先,要理解RabbitMQ中实现延时消息的...
这种功能对于处理定时任务、延迟通知、订单超时等场景非常有用。在这个"redis延时队列.zip"压缩包中,包含两个Java文件:DelayDataConsumer.java和DelayDataProducer.java,它们分别代表了延时队列的消费者和生产者...
Redis方案可能更适合轻量级的延时任务,而消息队列如RabbitMQ或RocketMQ更适合处理大规模、高可靠性的延迟消息场景。在设计和实现延时队列时,还需要考虑异常处理、容错机制以及性能优化等问题,确保系统的稳定性和...
在我们项目开发中,我们经常需要在特定时间后执行某些任务,例如订单超时未支付自动取消、资金余额低于限额提醒、延时消息发送等。延迟队列是一种非常实用的解决方案,而Redis也具备延迟队列的功能,这里博主将和...
RabbitMQ 可以用来执行延迟任务,例如可以使用延迟队列来实现订单超时取消等功能。 6. Redis 延时队列 Redis 是一个开源的键值存储数据库,提供了实现延迟队列的功能。Redis 可以用来执行延迟任务,例如可以使用...
延时队列在业务中有着广泛的应用,例如订单超时处理、定时发送邮件或短信等。通过延时队列,消息可以在特定时间后被消费者处理,而不是立即处理。RabbitMQ的延迟队列插件`rabbitmq_delayed_message_exchange`就是为...
延时消息队列是一种允许消息在特定时间后才被消费的机制,这在很多场景下非常有用,例如定时任务、订单超时处理等。Redis作为一个内存数据库,提供了丰富的数据结构,其中ZSet(有序集合)可以用来实现延时队列的...
这种情况下,通常的做法是设置一个每小时执行一次的定时任务,用于查询所有超时未评价的订单,并更新其状态。 这种方法虽然简单易行,但在实际应用中存在一些明显的不足之处: 1. **轮询效率低**:每个小时都需要...
在IT行业中,延迟队列是一种特殊的消息队列,它允许我们设定消息在特定时间后才被消费,这对于处理定时任务、订单超时、通知发送等场景非常有用。本项目是基于Go语言和Redis实现的延迟队列,借鉴了有赞(Zan)的设计...
6. **延时队列和定时任务**:这类功能在分布式系统中广泛使用,比如在电商的订单超时处理、任务调度、消息延迟发送等场景。它们可以基于各种技术实现,如Redis的延时队列、Quartz或Spring Task等。 为了深入了解...
在某些场景下,我们需要实现延迟任务,比如订单超时处理、任务重试等,RabbitMQ提供了相应的功能来支持这些需求。本文将深入探讨如何利用RabbitMQ的TTL(Time To Live)和Dead Letter Exchange特性来实现延迟任务。 ...
例如,在一个订单处理系统中,可以设置订单状态更新的消息在订单生成后的30分钟内不可见,以便在半小时内完成必要的处理流程。 在需要对历史数据进行再次处理的场景中,消息回溯功能显得尤为重要。CMQ允许用户回溯...