欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線程池隊列PriorityBlockingQueue和SynchronousQueue詳解

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

正文

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");
}

PriorityBlockingQueue阻塞優(yōu)先隊列

一個支持優(yōu)先級排序的無界阻塞隊列;對元素沒有要求,可以實(shí)現(xiàn)Comparable接口也可以提供 Comparator來對隊列中的元素進(jìn)行比較。通過構(gòu)造函數(shù)傳入的對象來判斷,傳入的對象必須實(shí)現(xiàn)comparable接口,并重寫compareTo方法??梢园凑?strong>自然排序或自定義排序的順序在隊列中對元素進(jìn)行排序。

例如新建對象Person:

public class Person implements Comparable<Person>{
private int id;
@Override
public int compareTo(Person person) {
        return this.id > person.getId() ? 1 : ( this.id < person.getId() ? -1 :0);
}
}

每次添加一個元素,PriorityBlockingQueue中的person都會執(zhí)行compareTo方法進(jìn)行排序,但是只是把第一個元素排在首位,其他元素按照隊列的一系列復(fù)雜算法排序。這就保障了每次獲取到的元素都是經(jīng)過排序的第一個元素。

SynchronousQueue

SynchronousQueue是一個不存儲元素的阻塞隊列,是BlockingQueue的一種,SynchronousQueue線程安全的。SynchronousQueue和其他的BlockingQueue不同的是SynchronousQueue的capacity是0。即SynchronousQueue不存儲任何元素。消費(fèi)者線程調(diào)用 take() 方法的時候就會發(fā)生阻塞,直到有一個生產(chǎn)者線程生產(chǎn)了一個元素,消費(fèi)者線程就可以拿到這個元素并返回;生產(chǎn)者線程調(diào)用 put() 方法的時候也會發(fā)生阻塞,直到有一個消費(fèi)者線程消費(fèi)了一個元素,生產(chǎn)者才會返回。

SynchronousQueue內(nèi)部并沒有數(shù)據(jù)緩存空間,你不能調(diào)用peek()方法來看隊列中是否有數(shù)據(jù)元素,因?yàn)閿?shù)據(jù)元素只有當(dāng)你試著取走的時候才可能存在,不取走而只想偷 窺一下是不行的,當(dāng)然遍歷這個隊列的操作也是不允許的。

隊列頭元素是第一個排隊要插入數(shù)據(jù)的線程,而不是要交換的數(shù)據(jù)。數(shù)據(jù)是在配對的生產(chǎn)者和消費(fèi)者線程之間直接傳遞的,并不會將數(shù)據(jù)緩沖到隊列中??梢赃@樣來理解:生產(chǎn)者和消費(fèi)者互相等待對方,握手,然后一起離開。

SynchronousQueue的一個使用場景是在線程池里。Executors.newCachedThreadPool()就使用了SynchronousQueue,這個線程池根據(jù)需要(新任務(wù)到來時)創(chuàng)建新的線程,如果有空閑線程則會重復(fù)使用,線程空閑了60秒后會被回收?!?/p>

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

相關(guān)文章

  • Java8中用foreach循環(huán)獲取對象的index下標(biāo)詳解

    Java8中用foreach循環(huán)獲取對象的index下標(biāo)詳解

    這篇文章主要給大家介紹了關(guān)于Java8中用foreach循環(huán)獲取對象的index下標(biāo)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析

    SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析

    這篇文章主要為大家介紹了SharedWorkerGlobalScope屬性數(shù)據(jù)共享示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • idea創(chuàng)建springboot項目(版本只能選擇17和21)的解決方法

    idea創(chuàng)建springboot項目(版本只能選擇17和21)的解決方法

    idea2023創(chuàng)建spring boot項目時,java版本無法選擇11,本文主要介紹了idea創(chuàng)建springboot項目(版本只能選擇17和21),下面就來介紹一下解決方法,感興趣的可以了解一下
    2024-01-01
  • 深入理解java重載和重寫

    深入理解java重載和重寫

    這篇文章主要介紹了Java方法重載和重寫原理區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-07-07
  • SpringCloud及Nacos服務(wù)注冊IP選擇問題解決方法

    SpringCloud及Nacos服務(wù)注冊IP選擇問題解決方法

    這篇文章主要介紹了SpringCloud及Nacos服務(wù)注冊IP選擇問題,為什么注冊的IP和真實(shí)IP不符合呢,原因是Nacos客戶端在注冊服務(wù)時會從機(jī)器網(wǎng)卡中選擇一個IP來注冊,所以,當(dāng)注冊了的是非真實(shí)IP后,另一臺機(jī)器調(diào)用時是不可能調(diào)通的,知道問題原因就是解決方法,一起看看吧
    2024-01-01
  • Spring?Boot中使用@Value加載配置的方法

    Spring?Boot中使用@Value加載配置的方法

    @Value注解相信很多Spring Boot的開發(fā)者都已經(jīng)有接觸了,通過使用該注解,我們可以快速的把配置信息加載到Spring的Bean中,這篇文章主要介紹了為什么不推薦在SpringBoot中使用@Value加載配置,需要的朋友可以參考下
    2024-05-05
  • springboot2.0 配置時間格式化不生效問題的解決

    springboot2.0 配置時間格式化不生效問題的解決

    這篇文章主要介紹了springboot2.0 配置時間格式化不生效問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java循環(huán)刪除List元素報錯的原因分析與解決

    java循環(huán)刪除List元素報錯的原因分析與解決

    大家在工作中應(yīng)該都會遇到從List集合中刪除某一個或多個元素的業(yè)務(wù)場景,相信大家都會避開在循環(huán)里面刪除元素,使用其他方式處理,這是為什么呢,下面小編就來和大家詳細(xì)聊聊
    2023-11-11
  • 詳解SpringBoot注解讀取配置文件的方式

    詳解SpringBoot注解讀取配置文件的方式

    這篇文章主要介紹了詳解SpringBoot注解讀取配置文件的方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 詳解如何獲取java中類的所有對象實(shí)例

    詳解如何獲取java中類的所有對象實(shí)例

    如何在運(yùn)行時獲取一個Java類的所有對象實(shí)例呢,本文給大家介紹一種底層實(shí)現(xiàn)的方式,基于jvmti,代碼用C++實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10

最新評論