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

Java線程池隊(duì)列DelayQueue的使用詳解

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

Java線程池隊(duì)列DelayQueue的使用及詳細(xì)介紹

一、什么是DelayQueue?

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

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

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

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

總結(jié)

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

二、案例

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("隊(duì)列大小:"+delayQueue.size());
        //立即返回,同時(shí)刪除元素,如果沒有過期元素則返回null
        System.out.println("poll方法獲?。?+delayQueue.poll());
        //立即返回,不會(huì)刪除元素,如果沒有過期元素也會(huì)返回該元素,只有當(dāng)隊(duì)列為null時(shí)才會(huì)返回null
        System.out.println("peek方法獲?。?+delayQueue.peek());
        //進(jìn)行阻塞
        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ī)則:按照過期時(shí)間排序
            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;
        }
    }
}

運(yùn)行結(jié)果:

隊(duì)列大?。?
poll方法獲取:null
peek方法獲?。篶om.brycen.part3.threadpool.collections.ArrayBlockingQueueExample$DelayElement@2437c6dc
take方法獲?。簍est2
iterator獲?。簍est1
iterator獲取:test4
iterator獲?。簍est3

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

相關(guān)文章

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

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

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

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

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

    Java編寫Mapreduce程序過程淺析

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

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

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

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

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

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

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

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

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

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

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

    如何修改maven默認(rèn)的JDK版本

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

    slf4j與log4j全面了解

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

最新評(píng)論

庆阳市| 泗阳县| 山阳县| 嘉禾县| 淮南市| 德安县| 余姚市| 陈巴尔虎旗| 余江县| 阜阳市| 北宁市| 天水市| 东乡族自治县| 大渡口区| 满城县| 砚山县| 钟山县| 河南省| 信丰县| 夏河县| 黑河市| 理塘县| 山阴县| 项城市| 巴彦淖尔市| 疏勒县| 马尔康县| 杭州市| 新津县| 尖扎县| 丰顺县| 昌邑市| 丰都县| 福泉市| 罗城| 米林县| 延津县| 青川县| 景宁| 吉水县| 瑞金市|