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

Java線程池隊列LinkedTransferQueue示例詳解

 更新時間:2022年12月11日 11:38:20   作者:刨紅薯的小羊竿爾  
這篇文章主要為大家介紹了Java線程池隊列LinkedTransferQueue示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

public enum QueueTypeEnum {
    ARRAY_BLOCKING_QUEUE(1, "ArrayBlockingQueue"),
    LINKED_BLOCKING_QUEUE(2, "LinkedBlockingQueue"),
    DELAY_QUEUE(3, "DelayQueue"),
    PRIORITY_BLOCKING_QUEUE(4, "PriorityBlockingQueue"),
    SYNCHRONOUS_QUEUE(5, "SynchronousQueue"),
    LINKED_TRANSFER_QUEUE(6, "LinkedTransferQueue"),
    LINKED_BLOCKING_DEQUE(7, "LinkedBlockingDeque"),
    VARIABLE_LINKED_BLOCKING_QUEUE(8, "VariableLinkedBlockingQueue"),
    MEMORY_SAFE_LINKED_BLOCKING_QUEUE(9, "MemorySafeLinkedBlockingQueue");
}

LinkedTransferQueue

無界阻塞隊列LinkedTransferQueue,此隊列也是基于鏈表實現(xiàn),對于所有給定的元素都是先入先出的。LinkedTransferQueue可以算是 LinkedBolckingQueue 和 SynchronousQueue 的合體。SynchronousQueue 內(nèi)部無法存儲元素,當要添加元素的時候,需要阻塞。

LinkedBolckingQueue 則內(nèi)部使用了大量的鎖,性能有所下降。

public class LinkedTransferQueue<E> extends AbstractQueue<E>
    implements TransferQueue<E>, java.io.Serializable {

相對于其他阻塞隊列,LinkedTransferQueue多了 tryTransfer(E e)和transfer(E e) 方法。

public interface TransferQueue<E> extends BlockingQueue<E> {
    // 如果可能,立即將元素轉(zhuǎn)移給等待的消費者。 
    // 更確切地說,如果存在消費者已經(jīng)等待接收它(在 take 或 timed poll(long,TimeUnit)poll)中,則立即傳送指定的元素,否則返回 false。
    boolean tryTransfer(E e);
    // 將元素轉(zhuǎn)移給消費者,如果需要的話等待。 
    // 更準確地說,如果存在一個消費者已經(jīng)等待接收它(在 take 或timed poll(long,TimeUnit)poll)中,則立即傳送指定的元素,否則等待直到元素由消費者接收。
    void transfer(E e) throws InterruptedException;
    // 上面方法的基礎(chǔ)上設(shè)置超時時間
    boolean tryTransfer(E e, long timeout, TimeUnit unit) throws InterruptedException;
    // 如果至少有一位消費者在等待,則返回 true
    boolean hasWaitingConsumer();
    // 返回等待消費者人數(shù)的估計值
    int getWaitingConsumerCount();
}

LinkedTransferQueue 消費者線程獲取取數(shù)據(jù)時:調(diào)用take poll 等方法

如果隊列不為空,則直接取走數(shù)據(jù),若隊列為空則消費者線程會生成一個占位虛擬節(jié)點(節(jié)點元素為null)入隊,并等待在這個節(jié)點上,后面生產(chǎn)者線程請求添加數(shù)據(jù)時,會從單向鏈表的head節(jié)點開始遍歷,如果發(fā)現(xiàn)某個節(jié)點是一個取數(shù)請求任務(wù)類型的節(jié)點(即是這個節(jié)點的isData為false,item == null),生產(chǎn)者線程就不入隊了,直接就將元素填充到該節(jié)點(元素傳遞給它),并喚醒該節(jié)點等待的消費者線程,被喚醒的消費者線程取走元素。

image.png

tryTransfer(E e)方法

tryTransfer(E e) 當生產(chǎn)者線程調(diào)用tryTransfer方法時,如果沒有消費者等待接收元素,則會立即返回false。該方法和transfer方法的區(qū)別就是tryTransfer方法無論消費者是否接收,方法立即返回,而transfer方法必須等到消費者消費后才返回。

tryTransfer(E e, long timeout, TimeUnit unit) 加上了限時等待功能,如果沒有消費者消費該元素,則等待指定的時間再返回;如果超時還沒消費元素,則返回false,如果在超時時間內(nèi)消費了元素,則返回true。

transfer(E e)方法

transfer方法,用于將指定元素e傳遞給消費者線程(調(diào)用take/poll方法)。如果有消費者線程正在阻塞等待,則調(diào)用transfer方法的線程會直接將元素傳遞給它;

如果沒有消費者線程等待獲取元素,則調(diào)用transfer方法的線程會將元素插入到隊尾,然后阻塞等待,直到出現(xiàn)一個消費者線程獲取元素。

以上就是Java線程池隊列LinkedTransferQueue示例詳解的詳細內(nèi)容,更多關(guān)于Java LinkedTransferQueue的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java8日期工具類封裝的實戰(zhàn)記錄

    java8日期工具類封裝的實戰(zhàn)記錄

    java time包中的是類是不可變且線程安全的,新的時間及日期API位于java.time中,下面這篇文章主要給大家介紹了關(guān)于java8日期工具類封裝的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 使用Java后端操作Docker的詳細教程

    使用Java后端操作Docker的詳細教程

    Docker 是現(xiàn)代開發(fā)和部署流程中不可或缺的一部分,它簡化了應(yīng)用程序的環(huán)境配置、打包和分發(fā),使得在不同機器上運行相同的應(yīng)用變得更加輕松和一致,本文將詳細介紹如何使用命令行工具(CMD)操控 Docker 來配置環(huán)境,需要的朋友可以參考下
    2025-02-02
  • 關(guān)于@Query注解的用法(Spring Data JPA)

    關(guān)于@Query注解的用法(Spring Data JPA)

    這篇文章主要介紹了關(guān)于@Query注解的用法(Spring Data JPA),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 基于@AliasFor注解的用法及說明

    基于@AliasFor注解的用法及說明

    這篇文章主要介紹了基于@AliasFor注解的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • HttpClient連接池及重試機制解析

    HttpClient連接池及重試機制解析

    這篇文章主要介紹了HttpClient連接池及重試機制解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳談Spring是否支持對靜態(tài)方法進行Aop增強

    詳談Spring是否支持對靜態(tài)方法進行Aop增強

    這篇文章主要介紹了Spring是否支持對靜態(tài)方法進行Aop增強,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java throw Exception實現(xiàn)異常轉(zhuǎn)換

    Java throw Exception實現(xiàn)異常轉(zhuǎn)換

    這篇文章主要介紹了Java throw Exception實現(xiàn)異常轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 從架構(gòu)思維角度分析分布式鎖方案

    從架構(gòu)思維角度分析分布式鎖方案

    這篇文章主要介紹了從架構(gòu)與思維的角度來分析分布式鎖的方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-01-01
  • 基于JavaBean編輯器讀取peroperties文件的實例

    基于JavaBean編輯器讀取peroperties文件的實例

    下面小編就為大家?guī)硪黄贘avaBean編輯器讀取peroperties文件的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java判斷字符串是否是整數(shù)或者浮點數(shù)的方法

    Java判斷字符串是否是整數(shù)或者浮點數(shù)的方法

    今天小編就為大家分享一篇Java判斷字符串是否是整數(shù)或者浮點數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

镇宁| 朝阳区| 乃东县| 玉树县| 体育| 枣阳市| 宁德市| 万山特区| 阜城县| 巩义市| 南平市| 灵川县| 康定县| 大竹县| 开化县| 池州市| 巴彦县| 天水市| 乌拉特后旗| 图木舒克市| 庆安县| 珠海市| 息烽县| 新蔡县| 四子王旗| 和静县| 东乌珠穆沁旗| 晋江市| 马边| 香格里拉县| 和田县| 锦屏县| 赤壁市| 安图县| 博客| 卓资县| 时尚| 新宾| 成都市| 泗水县| 遂溪县|