干货,干货,纯干货!
package com.dys.handler;
import lombok.Getter;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
@Getter
public class OrderDelayed implements Delayed {
//延迟任务的具体的执行内容
private final String taskContent;
// 延迟时间,秒为单位
private final Long triggerTime;
public OrderDelayed(String taskContent, Long delayTime) {
this.taskContent = taskContent;
this.triggerTime = System.currentTimeMillis() + delayTime *1000;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(triggerTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
return this.triggerTime.compareTo(((OrderDelayed) o).triggerTime);
}
}
######################################################################
package com.dys.handler;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.DelayQueue;
@Slf4j
public class TestDelayQueue {
public static void main(String[] args) {
DelayQueue orderDelayQueue =new DelayQueue<>();
new Thread(() -> {
while (true) {
try {
OrderDelayed take = (OrderDelayed)orderDelayQueue.take();
log.info("get Task:{}", take.getTriggerTime()+take.getTaskContent());
}catch (Exception e) {
}
}
}).start();
orderDelayQueue.offer(new OrderDelayed("1s order",1L));
orderDelayQueue.offer(new OrderDelayed("5s order",5L));
}
}