亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中DelayQueue實例用法詳解

 更新時間:2021年01月11日 16:04:28   作者:小妮淺淺  
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于java中DelayQueue實例用法詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。

在阻塞隊里中,除了對元素進(jìn)行增加和刪除外,我們可以把元素的刪除做一個延遲的處理,即使用DelayQueue的方法。這里的刪除需要一定的時間才能生效,有點類似于過期處理的理念。下面我們就DelayQueue的概念、特點進(jìn)行講解,然后在代碼示例中體會DelayQueue的使用。

1.概念

是一個帶有延遲時間的無界阻塞隊列。隊列中的元素,只有等延時時間到了,才能取出來。此隊列一般用于過期數(shù)據(jù)的刪除,或任務(wù)調(diào)度。以下,模擬一下定長時間的數(shù)據(jù)刪除。

2.特點

(1)無邊界設(shè)計

(2)添加(put)不阻塞,移除阻塞

(3)元素都有一個過期時間

(4)取元素只有過期的才會被取出

3.實例

每個需要放入DelayQueue隊列元素需要實現(xiàn)Delayed接口,下面我們創(chuàng)建DelayObject 類,其實例對象將被放入DelayQueue中。其構(gòu)造函數(shù)包括字符串類型數(shù)據(jù)及延遲毫秒變量。

public class DelayObject implements Delayed {
  private String data;
  private long startTime;
  public DelayObject(String data, long delayInMilliseconds) {
    this.data = data;
    this.startTime = System.currentTimeMillis() + delayInMilliseconds;
}

DelayQueue的應(yīng)用實例

package org.dromara.hmily.demo.springcloud.account.service;
 
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
 
/**
 * @description: 延時隊列測試
 * @author: hh
 */
public class DelayedQueneTest {
 
  public static void main(String[] args) throws InterruptedException {
    Item item1 = new Item("item1", 5, TimeUnit.SECONDS);
    Item item2 = new Item("item2",10, TimeUnit.SECONDS);
    Item item3 = new Item("item3",15, TimeUnit.SECONDS);
    DelayQueue<Item> queue = new DelayQueue<>();
    queue.put(item1);
    queue.put(item2);
    queue.put(item3);
    System.out.println("begin time:" + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
    for (int i = 0; i < 3; i++) {
      Item take = queue.take();
      System.out.format("name:{%s}, time:{%s}\n",take.name, LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
    }
  }
 
}
 
class Item implements Delayed{
  /* 觸發(fā)時間*/
  private long time;
  String name;
 
  public Item(String name, long time, TimeUnit unit) {
    this.name = name;
    this.time = System.currentTimeMillis() + (time > 0? unit.toMillis(time): 0);
  }
 
  @Override
  public long getDelay(TimeUnit unit) {
    return time - System.currentTimeMillis();
  }
 
  @Override
  public int compareTo(Delayed o) {
    Item item = (Item) o;
    long diff = this.time - item.time;
    if (diff <= 0) {// 改成>=會造成問題
      return -1;
    }else {
      return 1;
    }
  }
 
  @Override
  public String toString() {
    return "Item{" +
        "time=" + time +
        ", name='" + name + '\'' +
        '}';
  }
}

運行結(jié)果:每5秒取出一個

begin time:2019-05-31T11:58:24.445
name:{item1}, time:{2019-05-31T11:58:29.262}
name:{item2}, time:{2019-05-31T11:58:34.262}
name:{item3}, time:{2019-05-31T11:58:39.262}

到此這篇關(guān)于java中DelayQueue實例用法詳解的文章就介紹到這了,更多相關(guān)java中DelayQueue是什么內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaFx 實現(xiàn)按鈕防抖功能

    JavaFx 實現(xiàn)按鈕防抖功能

    最近Sun公司推出了JavaFX框架,使用它可以利用JavaFX編程語言來開發(fā)富互聯(lián)網(wǎng)應(yīng)用程序(RIA),這篇文章主要介紹了JavaFx 實現(xiàn)按鈕防抖功能,需要的朋友可以參考下
    2022-01-01
  • Springboot項目打包如何將依賴的jar包輸出到指定目錄

    Springboot項目打包如何將依賴的jar包輸出到指定目錄

    公司要對springboot項目依賴的jar包進(jìn)行升級,但是遇到一個問題,項目打包之后,沒辦法看到他里面依賴的jar包,版本到底是不是升上去了,沒辦法看到,下面通過本文給大家分享Springboot項目打包如何將依賴的jar包輸出到指定目錄,感興趣的朋友一起看看吧
    2024-05-05
  • Nacos配合SpringBoot實現(xiàn)動態(tài)線程池的基本步驟

    Nacos配合SpringBoot實現(xiàn)動態(tài)線程池的基本步驟

    使用Nacos配合Spring Boot實現(xiàn)動態(tài)線程池,可以讓你的應(yīng)用動態(tài)地調(diào)整線程池參數(shù)而無需重啟,這對于需要高度可配置且需要適應(yīng)不同負(fù)載情況的應(yīng)用來說非常有用,本文給大家介紹實現(xiàn)動態(tài)線程池的基本步驟,需要的朋友可以參考下
    2024-02-02
  • java實現(xiàn)Object和Map之間的轉(zhuǎn)換3種方式

    java實現(xiàn)Object和Map之間的轉(zhuǎn)換3種方式

    本篇文章主要介紹了java實現(xiàn)Object和Map之間的轉(zhuǎn)換3種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Mybatis plus中使用in查詢出錯如何解決

    Mybatis plus中使用in查詢出錯如何解決

    這篇文章主要介紹了Mybatis plus中使用in查詢出錯的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 如何創(chuàng)建SpringBoot項目

    如何創(chuàng)建SpringBoot項目

    這篇文章主要介紹了如何創(chuàng)建SpringBoot項目,幫助大家更好的學(xué)習(xí)和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01
  • Spring的@Value如何從Nacos配置中心獲取值并自動刷新

    Spring的@Value如何從Nacos配置中心獲取值并自動刷新

    這篇文章主要介紹了Spring的@Value如何從Nacos配置中心獲取值并自動刷新,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 解決idea?中?SpringBoot?點擊運行沒反應(yīng)按鈕成灰色的問題

    解決idea?中?SpringBoot?點擊運行沒反應(yīng)按鈕成灰色的問題

    在使用 Spring Boot 開發(fā)項目時,可能會遇到一個問題:點擊運行按鈕后,控制臺沒有任何輸出,項目界面也沒有顯示,這種情況可能是由多種原因?qū)е碌?,本文將介紹一些常見的解決方法,需要的朋友可以參考下
    2023-08-08
  • Java修改圖片大小尺寸的簡單實現(xiàn)

    Java修改圖片大小尺寸的簡單實現(xiàn)

    這篇文章主要介紹了Java修改圖片大小尺寸的簡單實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解決java main函數(shù)中的args數(shù)組傳值問題

    解決java main函數(shù)中的args數(shù)組傳值問題

    這篇文章主要介紹了解決java main函數(shù)中的args數(shù)組傳值問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論