日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java中的延時隊列 DelayQueue

瀏覽:73日期:2022-08-19 10:04:49

當用戶超時未支付時,給用戶發提醒消息。另一種場景是,超時未付款,訂單自動取消。通常,訂單創建的時候可以向延遲隊列種插入一條消息,到時間自動執行。其實,也可以用臨時表,把這些未支付的訂單放到一個臨時表中,或者Redis,然后定時任務去掃描。這里我們用延時隊列來做。RocketMQ有延時隊列,RibbitMQ也可以實現,Java自帶的也有延時隊列,接下來就回顧一下各種隊列。

詳解Java中的延時隊列 DelayQueue

Queue

隊列是一種集合。除了基本的集合操作以外,隊列還提供了額外的插入、提取和檢查操作。隊列的每個方法都以兩種形式存在:一種是當操作失敗時拋異常,另一種是返回一個特定的值(null或者false,取決于具體操作)。后一種形式的插入操作是專門設計用于有界隊列實現的,在大多情況下,插入操作不會失敗。

詳解Java中的延時隊列 DelayQueue

隊列通常(但不一定)以FIFO(先進先出)的方式對元素進行排序。例外情況包括優先級隊列(根據提供的比較器對元素進行排序或元素的自然排序)和LIFO隊列(或堆棧),對LIFO進行排序(后進先出)。無論使用哪種順序,隊列的開頭都是該元素,可以通過調用remove()或poll()將其刪除。在FIFO隊列中,所有新元素都插入隊列的尾部。其他種類的隊列可能使用不同的放置規則。 每個Queue實現必須指定其排序屬性。無論使用哪種順序,都可以通過調用remove()或poll()來刪除隊列開頭的元素。在FIFO隊列中,所有新元素都插入到隊列的尾部。其他類型的隊列可能使用不同的放置規則。每個隊列實現都必須指定其排序屬性。

offer方法在可以的情況下會向隊列種插入一個元素,否則返回false。這不同于Collection.add方法,后者只能通過拋異常來添加元素。offer方法設計用于在正常情況下(而不是在例外情況下)發生故障時,例如在固定容量(或者“有界”)隊列種使用。

remove()和poll()方法刪除并返回隊頭元素。當隊列為空時,remove()拋出異常,而poll()返回null。

element()和peek()方法返回隊頭元素。

PriorityQueue

PriorityQueue是一個無界優先級隊列是基于優先級堆的。優先級隊列種的元素根據自然順序進行排序,或者通過在隊列構建時提供的Comparator進行排序,當然這取決于使用哪種構造函數。優先級隊列不允許空(null)元素。一個依賴自然順序的優先級隊列也不允許插入不可比較的對象。

優先級隊列的隊頭元素是最小的元素,如果有多個元素并列最小,那么隊頭是它們其中之一。

優先級隊列是無界的,但是有一個內部容量來控制用于在隊列上存儲元素的數組的大小。它總是至少與隊列大小一樣大。將元素添加到優先級隊列時,其容量會自動增長

BlockingQueue

這種隊列還支持以下操作:在檢索元素時等待隊列變為非空,并在存儲元素時等待隊列中的空間變為可用。

BlockingQueue方法有四種形式,它們以不同的方式處理操作,這些操作無法立即滿足,但將來可能會滿足:一種拋出異常,第二種返回特殊值(null或false,取決于具體操作),第三種阻塞當前線程,直到操作成功為止;第四種阻塞當前線程,超時則放棄。 下表總結了這些方法:

詳解Java中的延時隊列 DelayQueue

阻塞隊列不接受空元素,如果你試圖add , put 或者 offer 一個null,將會拋NullPointerException。

阻塞隊列是線程安全的。所有排隊方法都使用內部鎖或者其他形式的并發控制來保證以原子方式實現它們的效果。

阻塞隊列被設計主要用于生產者-消費者隊列。

下面是一個典型的生產者-消費者方案:

package com.example;import java.text.MessageFormat;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;/** * @author ChengJianSheng * @date 2020/12/15 */public class Setup { public static void main(String[] args) { BlockingQueue<Bread> queue = new ArrayBlockingQueue<>(5); Producer p1 = new Producer(queue); Producer p2 = new Producer(queue); Consumer c1 = new Consumer(queue); Consumer c2 = new Consumer(queue); new Thread(p1, 'p1').start(); new Thread(p2, 'p2').start(); new Thread(c1, 'c1').start(); new Thread(c2, 'c2').start(); }}class Bread {}/** * 生產者 */class Producer implements Runnable { private final BlockingQueue<Bread> queue; public Producer(BlockingQueue<Bread> queue) { this.queue = queue; } @Override public void run() { try { while (true) {queue.put(produce()); } } catch (InterruptedException e) { e.printStackTrace(); } } public Bread produce() { try { Thread.sleep(Math.round(2000)); } catch (InterruptedException e) { e.printStackTrace(); } return new Bread(); }}/** * 消費者 */class Consumer implements Runnable { private final BlockingQueue<Bread> queue; public Consumer(BlockingQueue<Bread> queue) { this.queue = queue; } @Override public void run() { try { while (true) {consume(queue.take()); } } catch (InterruptedException e) { e.printStackTrace(); } } public void consume(Bread bread) { try { Thread.sleep(Math.round(2000)); } catch (InterruptedException e) { e.printStackTrace(); } }}ArrayBlockingQueue

ArrayBlockingQueue是用數組實現的有界阻塞隊列。這種隊列中的元素按FIFO(先進先出)排序。隊頭是在隊列中停留最長時間的元素。隊尾是在隊列中停留時間最短的元素。新元素插入到隊列的尾部,并且隊列檢索操作在隊列的頭部獲取元素。

這是一個經典的“有界緩沖區”,其中固定大小的數組包含由生產者插入并由消費者提取的元素。 創建后,容量將無法更改。 試圖將一個元素放入一個已滿的隊列將導致操作阻塞; 試圖從空隊列中取出一個元素也會阻塞。

這個類支持一個可選的公平性策略,用于對等待的生產者和消費者線程進行排序。默認情況下,不保證這個順序。然而,將公平性設置為true的隊列將按FIFO順序授予線程訪問權。公平性通常會降低吞吐量,但會降低可變性并避免饑餓。

LinkedBlockingQueue

LinkedBlockingQueue是一個基于鏈表實現的可選邊界的阻塞隊列。

PriorityBlockingQueue

PriorityBlockingQueue是一個無界阻塞隊列,它使用與PriorityQueue相同的排序規則,并提供阻塞檢索操作。

DelayQueue

DelayQueue是一種由延遲元素組成的無界阻塞隊列,在該隊列中,僅當元素的延遲到期時才可以使用該元素。隊頭是已經過期的延遲元素,它已過期時間最長。如果沒有過期的延遲,則隊列沒有頭部,此時調用poll將返回null。當調用元素的getDelay(TimeUnit.NANOSECONDS)方法返回值小于或等于0時,就會發生過期。即使元素沒有過期,也不能用take或者poll將其刪除。

AbstractQueuedSynchronizer

AbstractQueuedSynchronizer提供了一個框架來實現依賴于先進先出(FIFO)等待隊列的阻塞鎖和相關的同步器(信號燈,事件等)。該類旨在為大多數依賴單個原子int值表示狀態的同步器提供有用的基礎。子類必須定義更改此狀態的受保護方法,并定義該狀態對于獲取或釋放此對象而言意味著什么。 鑒于這些,此類中的其他方法將執行所有排隊和阻塞機制。 子類可以維護其他狀態字段,但是僅跟蹤關于同步的使用方法getState(),setState(int)和compareAndSetState(int,int)操作的原子更新的int值。

小結

1、Queue是一個集合,隊列的每個方法都有兩種形式,一種是拋異常,另一種是返回一個特定的值。

2、PriorityQueue是一個無界優先級隊列,默認情況下,隊列種的元素按自然順序排序,或者根據提供的Comparator進行排序。也就是說,優先級隊列種的元素都是經過排序的,排序規則可以自己指定,同時隊列種的元素都必須是可排序的。

3、BlockingQueue是一個阻塞隊列,向已滿的隊列種插入元素時會阻塞,向空隊列中取元素時也會阻塞;阻塞隊列被設計主要用于生產者-消費者隊列。

4、ArrayBlockingQueue是用數組實現的有界阻塞隊列,隊列種的元素按FIFO(先進先出)排序。

5、LinkedBlockingQueue是用鏈表實現的可選邊界的阻塞隊列。

6、PriorityBlockingQueue相當于是阻塞隊列和優先級隊列的合體,排序規則與優先級隊列相同。

7、DelayQueue延時隊列中的元素都有一個有效期,只有當過了有效期才可以使用該元素。

以上就是詳解Java中的延時隊列 DelayQueue的詳細內容,更多關于Java 延時隊列 DelayQueue的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产一级| 亚洲精品欧美| 亚洲综合激情在线| 国产精品普通话对白| 亚洲福利免费| 99精品在线免费在线观看| 日韩在线综合| 久久久久久久久久久妇女| 久久久久久夜| 亚洲国产福利| 四虎4545www国产精品| 久久久久免费av| 红桃视频欧美| 中文一区一区三区免费在线观 | 欧美亚洲激情| 日韩午夜黄色| 国产精品主播在线观看| 国产精品久久久久久久久久齐齐| 亚洲永久字幕| 欧美日韩精品一本二本三本 | 亚洲人成网77777色在线播放| 亚洲狼人精品一区二区三区| 免费的成人av| 日本午夜精品一区二区三区电影| 日本成人在线不卡视频| 国产私拍福利精品视频二区| 国产精品久久久久av蜜臀| 美女在线视频一区| 在线一区av| 日韩午夜在线| 久久激情综合网| 黑森林国产精品av| 亚洲激情黄色| 国产毛片一区二区三区| 午夜影院一区| 视频一区二区三区在线| 国产精选久久| 精品九九久久| 久久一区二区三区电影| 亚洲我射av| 日产欧产美韩系列久久99| 麻豆一区在线| 亚洲欧美一区在线| 欧美一级网站| 首页亚洲欧美制服丝腿| 午夜日韩福利| 国产麻豆一区二区三区精品视频| 欧美成a人免费观看久久| 国产精品毛片久久久| 免费日本视频一区| 国产精品jk白丝蜜臀av小说| 久久福利在线| 国产精品不卡| 青青草伊人久久| 国产一区二区三区亚洲综合| 久久在线免费| 91精品麻豆| 欧美aa在线观看| 日韩精品一二三区| 激情综合五月| 久久亚洲欧美| 欧美xxxx中国| 日韩中文字幕| 欧美色图国产精品| 美女在线视频一区| 视频在线观看一区二区三区| 久久免费视频66| 中文在线不卡| 国产精品99久久久久久董美香| 亚洲精品国产偷自在线观看| 精品亚洲成人| 午夜日韩av| 国产成人免费av一区二区午夜| 久久av一区| xxxxx性欧美特大| 国产三级一区| 日韩中文字幕亚洲一区二区va在线| 国产一区二区三区不卡av| 亚洲免费一区三区| 欧美影院三区| 精品国产18久久久久久二百| 亚洲精品无吗| 久久精品在线| 欧美中文一区| 国产免费成人| 日本欧美不卡| 精品国产一区二区三区2021| 日本亚州欧洲精品不卡| 国内精品福利| 亚洲国产成人二区| 精品中文在线| 国产伦精品一区二区三区视频| 天堂成人免费av电影一区 | 国产伊人久久| 日韩不卡手机在线v区| 欧美日韩亚洲国产精品| 亚洲一区欧美激情| 韩日一区二区三区| 久久久久久美女精品| 91亚洲自偷观看高清| 久久99精品久久久野外观看| 热久久久久久| 日韩免费精品| 亚洲小说春色综合另类电影| 亚洲国产一区二区在线观看 | 亚洲丝袜啪啪| 亚洲一区二区三区四区电影| 激情综合五月| 欧美一级二区| 日韩欧美另类中文字幕| 视频一区欧美日韩| 成人台湾亚洲精品一区二区| 国产不卡一区| 色一区二区三区四区| 日韩三级精品| 欧美日韩中文字幕一区二区三区| 亚洲精品在线a| 亚洲不卡av不卡一区二区| 综合一区av| 国内激情久久| 午夜视频一区二区在线观看| 欧美一区久久| 999在线观看精品免费不卡网站| 亚洲精品黄色| 亚洲经典在线| 日韩精品成人| 亚洲一级大片| 国产精品红桃| 欧洲一区二区三区精品| 国产一区不卡| 清纯唯美亚洲综合一区| 国产精品久久久网站| 亚洲最新无码中文字幕久久 | 欧美日韩国产传媒| 伊人久久在线| 欧美sss在线视频| 香蕉精品视频在线观看| 午夜国产欧美理论在线播放| 夜夜嗨一区二区| 石原莉奈一区二区三区在线观看 | 国产一区二区三区天码| 国产成人精品福利| 中文字幕色婷婷在线视频 | 国产麻豆久久| 女人天堂亚洲aⅴ在线观看| 亚洲精品小说| 午夜性色一区二区三区免费视频| 国产日韩一区二区三区在线| 欧美黄色一区二区| 伊人久久视频| 不卡在线一区二区| 亚洲欧美在线综合| 欧美国产另类| 日韩不卡视频在线观看| 久久福利一区| 久久国产三级| 精品久久91| 99pao成人国产永久免费视频| 色狠狠一区二区三区| 国产欧美日韩在线观看视频| 久久精品国产亚洲aⅴ| 色吊丝一区二区| 欧美大黑bbbbbbbbb在线| 亚洲综合图色| 欧美激情一区| 亚洲女同中文字幕| 欧美久久精品| 日韩成人亚洲| 亚洲美女久久| 国产h片在线观看| 国产精品外国| 久久99国产精品视频| 欧美午夜不卡| 国产精品一区亚洲| 91精品国产乱码久久久久久久| 伊人久久亚洲美女图片| 青青草精品视频| 久久激情网站| 国产人成精品一区二区三| 日韩国产专区| 日本综合精品一区| 视频福利一区| 欧美影院视频| 欧美搞黄网站| 久久免费影院| 亚洲精品大片| 精品捆绑调教一区二区三区| 91免费精品国偷自产在线在线| 999视频精品| 国产欧美日韩在线一区二区| 精品欧美一区二区三区在线观看| 日韩有吗在线观看| se01亚洲视频| 国产亚洲欧美日韩在线观看一区二区 | 99久久久久| 日韩成人午夜精品| 亚洲成av在线| 老司机精品视频在线播放| 国产精品嫩草99av在线| 国产a亚洲精品|