最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程池隊列DelayQueue的使用詳解

 更新時間:2023年12月07日 08:47:37   作者:Brycen Liu  
這篇文章主要介紹了Java線程池隊列DelayQueue的使用詳解,DelayQueue顧名思義,它是個無邊界延遲隊列,它的底層是基于PriorityBlockingQueue實現(xiàn)的,該隊列中的元素都是按照過期時間順序排序的,隊列頭部放的是即將過期的元素,需要的朋友可以參考下

Java線程池隊列DelayQueue的使用及詳細介紹

一、什么是DelayQueue?

DelayQueue顧名思義,它是個無邊界延遲隊列,它的底層是基于PriorityBlockingQueue實現(xiàn)的。

該隊列中的元素都是按照過期時間順序排序的,隊列頭部放的是即將過期的元素。

該隊列中的元素必須實現(xiàn)Delayed接口,getDelay定義了剩余到期時間,compareTo方法定義了元素排序規(guī)則。

該隊列不允許存放null元素。延時隊列實現(xiàn)了Iterator接口,但Iterator()遍歷順序不保證是元素的實際存放順序。

總結(jié)

  • DelayQueue隊列是無邊界
  • 隊列中按照過期時間排序
  • 隊列中的元素必須實現(xiàn)Delayed接口
  • 不允許存放null元素
  • poll方法獲取元素時,立即返回,如果沒有過期的元素則返回null
  • take方法獲取元素時,如果沒有過期的元素則會進行阻塞
  • peek方法獲取元素時,立即返回,不會刪除該元素,即使沒有過期的元素也會獲取到
  • 使用Iterator可以立即返回該隊列中的元素,但是不保證順序

二、案例

package com.brycen.part3.threadpool.collections;
import java.util.Iterator;
import java.util.concurrent.*;
public class DelayQueueExample {
    public static void main(String[] args) throws InterruptedException {
        DelayQueue<DelayElement> delayQueue = new DelayQueue<>();
        delayQueue.add(new DelayElement<String>("test1",1000));
        delayQueue.add(new DelayElement<String>("test2",800));
        delayQueue.add(new DelayElement<String>("test3",2000));
        delayQueue.add(new DelayElement<String>("test4",3000));
        System.out.println("隊列大小:"+delayQueue.size());
        //立即返回,同時刪除元素,如果沒有過期元素則返回null
        System.out.println("poll方法獲?。?+delayQueue.poll());
        //立即返回,不會刪除元素,如果沒有過期元素也會返回該元素,只有當隊列為null時才會返回null
        System.out.println("peek方法獲?。?+delayQueue.peek());
        //進行阻塞
        System.out.println("take方法獲?。?+delayQueue.take().getData());
        //立即返回,但不能保證順序
        Iterator<DelayElement> iterator = delayQueue.iterator();
        while (iterator.hasNext()){
            DelayElement element = iterator.next();
            System.out.println("iterator獲?。?+element.getData());
        }
    }
    static class DelayElement<E> implements Delayed{
        private final long expireTime;
        private final E e;
        public DelayElement(E e,long delay) {
            this.expireTime = System.currentTimeMillis()+delay;
            this.e = e;
        }
        @Override
        public long getDelay(TimeUnit unit) {
            //判斷是否過期
            return unit.convert(expireTime-System.currentTimeMillis(),TimeUnit.MILLISECONDS);
        }
        @Override
        public int compareTo(Delayed delayed) {
            //排序規(guī)則:按照過期時間排序
            DelayElement that = (DelayElement)delayed;
            if (this.expireTime<that.expireTime){
                return -1;
            }else if (this.expireTime>that.expireTime){
                return 1;
            }else {
                return 0;
            }
        }
        public E getData() {
            return e;
        }
    }
}

運行結(jié)果:

隊列大?。?
poll方法獲?。簄ull
peek方法獲?。篶om.brycen.part3.threadpool.collections.ArrayBlockingQueueExample$DelayElement@2437c6dc
take方法獲?。簍est2
iterator獲取:test1
iterator獲?。簍est4
iterator獲?。簍est3

到此這篇關(guān)于Java線程池隊列DelayQueue的使用詳解的文章就介紹到這了,更多相關(guān)Java線程池隊列DelayQueue內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于多線程常用方法以及對鎖的控制(詳解)

    關(guān)于多線程常用方法以及對鎖的控制(詳解)

    下面小編就為大家?guī)硪黄P(guān)于多線程常用方法以及對鎖的控制(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring?JDBC使用步驟和事務(wù)管理

    Spring?JDBC使用步驟和事務(wù)管理

    Spring?JDBC是Spring框架用來處理關(guān)系型數(shù)據(jù)庫的模塊,對JDBC的API進行了封裝,這篇文章主要介紹了Spring?JDBC使用步驟和事務(wù)管理,需要的朋友可以參考下
    2023-12-12
  • Java編寫Mapreduce程序過程淺析

    Java編寫Mapreduce程序過程淺析

    MapReduce是一種用于處理大規(guī)模數(shù)據(jù)集的并行編程模型,其特點高效性和可擴展性,在本文中,我們將深入了解MapReduce,并使用Java編寫一個簡單的MapReduce程序,需要的朋友可以參考下
    2023-05-05
  • Java實現(xiàn)選擇排序算法的實例教程

    Java實現(xiàn)選擇排序算法的實例教程

    這篇文章主要介紹了Java實現(xiàn)選擇排序算法的實例教程,選擇排序的時間復雜度為О(n&sup2;),需要的朋友可以參考下
    2016-05-05
  • 淺談java 中文件的讀取File、以及相對路徑的問題

    淺談java 中文件的讀取File、以及相對路徑的問題

    今天小編就為大家分享一篇淺談java 中文件的讀取File、以及相對路徑的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Spring @Order注解的使用小結(jié)

    Spring @Order注解的使用小結(jié)

    本文主要介紹了Spring @Order注解的使用小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • java讀取excel圖片導入代碼示例(親測有效)

    java讀取excel圖片導入代碼示例(親測有效)

    在日常工作中,我們經(jīng)常要將一些照片插入到Excel表格中,這篇文章主要給大家介紹了關(guān)于java讀取excel圖片導入的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 簡單了解Java創(chuàng)建線程兩種方法

    簡單了解Java創(chuàng)建線程兩種方法

    這篇文章主要介紹了簡單了解Java創(chuàng)建線程兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 如何修改maven默認的JDK版本

    如何修改maven默認的JDK版本

    這篇文章主要介紹了如何修改maven默認的JDK版本,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • slf4j與log4j全面了解

    slf4j與log4j全面了解

    下面小編就為大家?guī)硪黄猻lf4j與log4j全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論

开江县| 拜城县| 宣威市| 和平区| 墨玉县| 司法| 道孚县| 咸宁市| 清河县| 井陉县| 高雄县| 延津县| 竹北市| 定边县| 康保县| 济源市| 黔南| 奉化市| 楚雄市| 体育| 揭阳市| 交城县| 襄汾县| 奉贤区| 阜新市| 中阳县| 桓仁| 鱼台县| 玉溪市| 泸溪县| 麻栗坡县| 孝义市| 文安县| 祁连县| 城口县| 新兴县| 瓦房店市| 北辰区| 越西县| 永泰县| 榆林市|