java - 為什么我的延遲隊(duì)列取不出數(shù)據(jù)了?
問題描述
我使用java的延遲隊(duì)列來取數(shù)據(jù),但是發(fā)現(xiàn)根本無法取出數(shù)據(jù)。
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();} }}
結(jié)果是一直在阻塞。我想請教這是為什么,感覺自己調(diào)用的沒有錯(cuò)啊
問題解答
回答1:getDelay()始終返回1,所以永遠(yuǎn)不會(huì)expire。
可以仔細(xì)研究一下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
相關(guān)文章:
1. dockerfile - 為什么docker容器啟動(dòng)不了?2. angular.js - angularjs的自定義過濾器如何給文字加顏色?3. macos - mac下docker如何設(shè)置代理4. 請教各位大佬,瀏覽器點(diǎn) 提交實(shí)例為什么沒有反應(yīng)5. javascript - iframe 為什么加載網(wǎng)頁的時(shí)候滾動(dòng)條這樣顯示?6. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問題 麻煩幫我看一下7. javascript - es6中this8. javascript - web網(wǎng)頁版app返回上一頁按鈕在ios設(shè)備失效怎么辦?安卓上可以,代碼如下,請大神幫助,萬分感謝。9. javascript - 用rem寫的頁面,安卓手機(jī)顯示文字是正常的,蘋果顯示的文字是特別小的是為什么呢10. 新手 - Python 爬蟲 問題 求助
