做网站要学会那些,北京seo邢云涛,云南最近出了什么流行病,中国网站设计模板下载DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题#xff0c;老规矩#xff0c;我们将从使用场景和代码示例来进行讲解 来#xff0c;思考片刻#xff0c;给出你的答案 1#xff0c;使用场景
实现#xff1a;延迟队列#xff0c;其中元素只有在其预定…DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题老规矩我们将从使用场景和代码示例来进行讲解 来思考片刻给出你的答案 1使用场景
实现延迟队列其中元素只有在其预定时间到达后才可以从队列中取出。场景适用于延时任务调度如定时任务、缓存失效处理等。 2代码示例
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;class DelayedItem implements Delayed {private long delayTime; // 延迟时间private long insertionTime; // 加入队列的时间public DelayedItem(long delay, TimeUnit unit) {this.delayTime unit.toNanos(delay);this.insertionTime System.nanoTime();}Overridepublic long getDelay(TimeUnit unit) {return unit.convert(delayTime - (System.nanoTime() - insertionTime), TimeUnit.NANOSECONDS);}Overridepublic int compareTo(Delayed o) {if (this o)return 0;long diff (getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS));return (diff 0) ? 0 : ((diff 0) ? -1 : 1);}Overridepublic String toString() {return DelayedItem;}
}public class DelayQueueExample {static final DelayQueueDelayedItem queue new DelayQueue();public static void main(String[] args) throws InterruptedException {queue.put(new DelayedItem(5, TimeUnit.SECONDS));Thread consumer new Thread(() - {try {DelayedItem delayedItem queue.take(); // 只有延迟时间到了才能取出System.out.println(Consumed after delay: delayedItem);} catch (InterruptedException e) {e.printStackTrace();}});consumer.start();// 等待consumer完成consumer.join();}
}
至此关于BlockingQueue接口的关键实现类也给大伙介绍完毕了
想系统性学习更多进阶的内容欢迎来加入我的星球