JUC-延迟队列基本实现

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())+"毫秒";
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值