package com.mldn.demo;
import java.util.concurrent.*;
public class JUUCDemo {
public static void main(String[] args) throws Exception{
BlockingQueue deque = new DelayQueue() ;
deque.put(new Member(“张三”,5,TimeUnit.SECONDS));
deque.put(new Member(“李四”,2,TimeUnit.SECONDS));
deque.put(new Member(“王五”,6,TimeUnit.SECONDS));
while (!deque.isEmpty()){
Member mem = deque.take() ;
System.out.println(mem);
TimeUnit.SECONDS.sleep(1);
}
}
}
class Member implements Delayed {//实现延迟队列
private String name ;
private long expire ;//队列元素的失效时间(弹出)
private long delay ;//从进入开始到离开的延迟时间
//每个人对时间的控制不同,使用TimeUtil进行时间单元配置,不管什么单元最终都以毫秒为主
public Member(String name , long delay , TimeUnit timeUnit){
this.name = name ;
this.delay = TimeUnit.MILLISECONDS.convert(delay,timeUnit);
this.expire = System.currentTimeMillis()+this.delay ;
}
@Override
public int compareTo(Delayed o) {
return (int)(this.delay - this.getDelay(TimeUnit.MILLISECONDS));
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(this.expire - System.currentTimeMillis(),TimeUnit.MILLISECONDS);
}
@Override
public String toString() {
return this.name + "执行耗时:"+(this.expire-System.currentTimeMillis())+"毫秒";
}
}