delayqueue

DelayedQueue是一个用来延时处理的队列。可以为队列中的元素添加一个过期的时间,

队列中的元素 要实现 delay接口中的两个方法

​存入队列:add offer put

从队列中获取:peek poll take​

peek:获取队列的head对象,但不是从队列中移除。如果队列空,就返回空

poll :​获取并移出队列head对象。如果head没有超时,返回空

poll w/ timeout参数 : ​获取并移出队列head对象。如果没有超时head对象,会wait当前线程知道有超时对象,或者按照超时参数设定,返回空

take : ​获取并移出队列head对象。如果没有超时head对象,会wait当前线程知道有对象满足超时条件

​DelayedQueue实现保证了最快过期的对象排在head位置,也就是说它会在每次peek时候返回最快超时的对象。

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) throws InterruptedException {
        DelayQueue<Person> delayQueue =  new DelayQueue<>();
        delayQueue.clear();
        Calendar calendar = Calendar.getInstance();
        for (int i=1;i<11;i++){
            calendar.add(Calendar.SECOND,i*10);
            Person m = new Person(i+" is id",i+" is name",System.currentTimeMillis()+i*1000,calendar.getTime());
            delayQueue.add(m);
        }
        Iterator<Person> iterator = delayQueue.iterator();
        while(iterator.hasNext()){
            Person p=iterator.next();
            System.out.println(p);
        }
        while(!delayQueue.isEmpty()){
            Person message = delayQueue.take();//阻塞方法
            System.out.println(message);
        }
 
    }
}

class Person implements Delayed{
    private String id;
    private String name;
    private long insertTime;
    private Date outTime;
    
    public Person(String id, String name,long insertTime,Date outTime) {
        super();
        this.id = id;
        this.name = name;
        this.insertTime = insertTime;
        this.outTime = outTime;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public long getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(long insertTime) {
        this.insertTime = insertTime;
    }
    public Date getOutTime() {
        return outTime;
    }
    public void setOutTime(Date outTime) {
        this.outTime = outTime;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", outTime=" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(outTime) + "]";
    }
    @Override
    public int compareTo(Delayed o) {
        Person person = (Person) o;
        
        if(this.insertTime > person.insertTime){
            return 1;
        }else if(this.insertTime == person.insertTime){
            return 0;
        }else{
            return -1;
        }
    }
    @Override
    public long getDelay(TimeUnit unit) {
        return this.outTime.getTime()-System.currentTimeMillis();
    }
    
}

 

posted on 2018-02-11 15:55 会跳舞的笨笨熊 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ITguoguo/p/8442247.html

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
<p> 课程演示环境:Windows10  </p> <p> 需要学习<span>Ubuntus</span>系统<span>YOLOv4-tiny</span>的同学请前往《<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》 <span></span> </p> <p> <span> </span> </p> <p> <span style="color:#E53333;">YOLOv4-tiny</span><span style="color:#E53333;">来了!速度大幅提升!</span><span></span> </p> <p> <span> </span> </p> <p> <span>YOLOv4-tiny</span>在<span>COCO</span>上的性能可达到:<span>40.2% AP50, 371 FPS (GTX 1080 Ti)</span>。相较于<span>YOLOv3-tiny</span>,<span>AP</span>和<span>FPS</span>的性能有巨大提升。并且,<span>YOLOv4-tiny</span>的权重文件只有<span>23MB</span>,适合在移动端、嵌入式设备、边缘计算设备上部署。<span></span> </p> <p> <span> </span> </p> <p> 本课程将手把手地教大家使用<span>labelImg</span>标注和使用<span>YOLOv4-tiny</span>训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。<span></span> </p> <p> <span> </span> </p> <p> 本课程的<span>YOLOv4-tiny</span>使用<span>AlexAB/darknet</span>,在<span>Windows10</span>系统上做项目演示。包括:<span>YOLOv4-tiny</span>的网络结构、安装<span>YOLOv4-tiny</span>、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计<span>(mAP</span>计算<span>)</span>和先验框聚类分析。 <span> </span> </p> <p> <span> </span> </p> <p> 除本课程《<span>Windows</span>版<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》外,本人推出了有关<span>YOLOv4</span>目标检测的系列课程。请持续关注该系列的其它视频课程,包括:<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:训练自己的数据集》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:人脸口罩佩戴识别》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:中国交通标志识别》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测:原理与源码解析》<span></span> </p> <p> <span> <img alt="" src="https://img-bss.csdnimg.cn/202007061503586145.jpg" /></span> </p> <p> <span><img alt="" src="https://img-bss.csdnimg.cn/202007061504169339.jpg" /><br /> </span> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页