当前位置:网站首页>Delayqueue usage and scenarios of delay queue
Delayqueue usage and scenarios of delay queue
2022-07-05 07:13:00 【Bubble ^ bubble】
An implementation PriorityBlockingQueue Realize the boundless queue of delay acquisition , When you create an element , You can specify how long it takes to get the current element from the queue . Only after the delay expires can the element be retrieved from the queue .
Use scenarios :
1. Scheduled task scheduling . Use DelayQueue Save the tasks and execution time that will be performed on that day , Once from DelayQueue Get the task and start executing , From, for example TimerQueue Is the use of DelayQueue Realized .
2. The design of cache system : It can be used DelayQueue Save the validity of the cache elements , Use a thread loop to query DelayQueue, Once you can get from DelayQueue When getting elements in , Indicates that the cache expiration date is .
3. Order late payment close .(MQ Delayed message queuing / Time wheel / Timing task )
Code case
package thread;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class DelayQueueExampleTask implements Delayed {
private String orderId;
private long start = System.currentTimeMillis();
private long time;
public DelayQueueExampleTask(String orderId,long time) {
this.orderId = orderId;
this.time = time;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert((start+time)-System.currentTimeMillis(),TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
return (int)(this.getDelay(TimeUnit.MILLISECONDS)-o.getDelay(TimeUnit.MILLISECONDS));
}
@Override
public String toString() {
return "DelayQueueExampleTask{" +
"orderId='" + orderId + '\'' +
", start=" + start +
", time=" + time +
'}';
}
}
package thread;
import java.util.concurrent.DelayQueue;
public class DelayQueueExampleTaskTest {
private static DelayQueue<DelayQueueExampleTask> delayQueue = new DelayQueue();
public static void main(String[] args) {
delayQueue.offer(new DelayQueueExampleTask("1001",1000));
delayQueue.offer(new DelayQueueExampleTask("1002",2000));
delayQueue.offer(new DelayQueueExampleTask("1003",3000));
delayQueue.offer(new DelayQueueExampleTask("1004",5000));
delayQueue.offer(new DelayQueueExampleTask("1005",6000));
delayQueue.offer(new DelayQueueExampleTask("1006",7000));
delayQueue.offer(new DelayQueueExampleTask("1007",8000));
delayQueue.offer(new DelayQueueExampleTask("1008",3000));
while(true){
try {
DelayQueueExampleTask task = delayQueue.take();
System.out.println(task);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Execution effect :
边栏推荐
- M2DGR 多源多场景 地面机器人SLAM数据集
- DelayQueue延迟队列的使用和场景
- ImportError: No module named ‘Tkinter‘
- [software testing] 03 -- overview of software testing
- PHY驱动调试之 --- PHY控制器驱动(二)
- ROS2——安装ROS2(三)
- 全局变量和静态变量的初始化
- IPage can display data normally, but total is always equal to 0
- Sre core system understanding
- Negative number storage and type conversion in programs
猜你喜欢
随机推荐
ROS2——node节点(七)
Ros2 topic (VIII)
In C language, int a= 'R'
Three body goal management notes
三体目标管理笔记
Use of Pai platform
Sre core system understanding
Unity 之 ExecuteAlways正在取代ExecuteInEditMode
纯碱是做什么的?
Lexin interview process
Unity UGUI不同的UI面板或者UI之间如何进行坐标匹配和变换
2022.06.27_ One question per day
Volcano resource reservation feature
程序中的负数存储及类型转换
ROS2——ROS2对比ROS1(二)
Intelligent target detection 59 -- detailed explanation of pytoch focal loss and its implementation in yolov4
Ros2 - common command line (IV)
Import CV2, prompt importerror: libcblas so. 3: cannot open shared object file: No such file or directory
Use the Paping tool to detect TCP port connectivity
PHY驱动调试之 --- MDIO/MDC接口22号和45号条款(一)








