久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

java - 為什么我的延遲隊列取不出數據了?

瀏覽:179日期:2024-02-09 16:54:17

問題描述

我使用java的延遲隊列來取數據,但是發現根本無法取出數據。

package com.test;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;public class SmsEntity implements Delayed { private final long WAIT_TIME = 10; private long startTime = System.currentTimeMillis(); private String phone; public SmsEntity(String phone) {this.phone = phone; } public String getPhone() {return phone; } public void setPhone(String phone) {this.phone = phone; } public long getStartTime() {return startTime; } public void setStartTime(long startTime) {this.startTime = startTime; } @Override public int compareTo(Delayed o) {SmsEntity entity = (SmsEntity) o;if (this.getStartTime() - entity.getStartTime() > 0) { return 1;}return -1; } @Override public long getDelay(TimeUnit unit) {//long waitTimeForGiveTimeUnit = unit.convert(WAIT_TIME, TimeUnit.MILLISECONDS);//long areadyLeftTime = unit.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS)//- unit.convert(startTime, TimeUnit.MILLISECONDS);//if (areadyLeftTime > waitTimeForGiveTimeUnit) {// return 0;//}//return unit.convert(waitTimeForGiveTimeUnit - areadyLeftTime, TimeUnit.MILLISECONDS);return 1; }}package com.test;import java.util.concurrent.DelayQueue;public class DelayQueueDemo { public static void main(String[] args) {DelayQueue<SmsEntity> queue=new DelayQueue<>();queue.put(new SmsEntity('1'));try {// Thread.sleep(3000); queue.put(new SmsEntity('2')); System.out.println(queue.take().getPhone()); System.out.println(queue.take().getPhone());} catch (InterruptedException e) { e.printStackTrace();} }}

結果是一直在阻塞。我想請教這是為什么,感覺自己調用的沒有錯啊

問題解答

回答1:

getDelay()始終返回1,所以永遠不會expire。

可以仔細研究一下DelayQueue的文檔: https://docs.oracle.com/javas...

Expiration occurs when an element’s getDelay(TimeUnit.NANOSECONDS)method returns a value less than or equal to zero

標簽: java
相關文章:
主站蜘蛛池模板: 樟树市| 康平县| 永仁县| 顺昌县| 信阳市| 康马县| 宣威市| 会同县| 丰县| 平罗县| 桦南县| 新和县| 方城县| 英超| 济宁市| 巫溪县| 甘南县| 保靖县| 剑川县| 布尔津县| 清苑县| 无为县| 庆阳市| 额敏县| 镇远县| 靖远县| 肥乡县| 朝阳区| 怀安县| 松桃| 乌苏市| 遵义市| 田林县| 竹山县| 象山县| 千阳县| 辉县市| 垣曲县| 泰和县| 富蕴县| 长丰县|