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

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)文章

  • 使用mybatis進(jìn)行數(shù)據(jù)插入時返回自增id的方法及注意點(diǎn)

    使用mybatis進(jìn)行數(shù)據(jù)插入時返回自增id的方法及注意點(diǎn)

    這篇文章主要給大家介紹了關(guān)于使用mybatis進(jìn)行數(shù)據(jù)插入時返回自增id的方法及注意點(diǎn),在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因?yàn)椴迦氲膶?shí)體類數(shù)據(jù)id為空,后面的邏輯還需要這個id,需要的朋友可以參考下
    2023-09-09
  • Spring實(shí)現(xiàn)文件上傳(示例代碼)

    Spring實(shí)現(xiàn)文件上傳(示例代碼)

    Spring可以繼承commons-fileupload插件來實(shí)現(xiàn)文件上傳的功能。分為前端JSP編寫和后臺Controller的編寫
    2013-10-10
  • java返回前端實(shí)體類json數(shù)據(jù)時忽略某個屬性方法

    java返回前端實(shí)體類json數(shù)據(jù)時忽略某個屬性方法

    這篇文章主要給大家介紹了關(guān)于java返回前端實(shí)體類json數(shù)據(jù)時忽略某個屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • java堆排序原理及算法實(shí)現(xiàn)

    java堆排序原理及算法實(shí)現(xiàn)

    本篇文章主要介紹了堆排序的簡介,定義,算法實(shí)現(xiàn)以及堆排序的性質(zhì)。想要了解的朋友可以參考下
    2017-04-04
  • 如何解決getReader() has already been called for this request問題

    如何解決getReader() has already been called&

    這篇文章主要介紹了如何解決getReader() has already been called for this request問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • redis redisson 集合的使用案例(RList、Rset、RMap)

    redis redisson 集合的使用案例(RList、Rset、RMap)

    這篇文章主要介紹了redis redisson 集合的使用案例(RList、Rset、RMap),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java groovy內(nèi)存回收測試步驟解析

    Java groovy內(nèi)存回收測試步驟解析

    這篇文章主要介紹了Java groovy內(nèi)存回收測試步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 詳解MyBatis自定義Plugin插件

    詳解MyBatis自定義Plugin插件

    這篇文章主要介紹了MyBatis自定義Plugin插件的相關(guān)知識,實(shí)現(xiàn)方法也很簡單,只需實(shí)現(xiàn) Interceptor 接口,并指定想要攔截的方法簽名即可,需要的朋友可以參考下
    2018-06-06
  • Mybatis查詢返回兩個或多個參數(shù)問題

    Mybatis查詢返回兩個或多個參數(shù)問題

    這篇文章主要介紹了Mybatis查詢返回兩個或多個參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Spring解決循環(huán)依賴問題及三級緩存的作用

    Spring解決循環(huán)依賴問題及三級緩存的作用

    這篇文章主要介紹了Spring解決循環(huán)依賴問題及三級緩存的作用,所謂的三級緩存只是三個可以當(dāng)作是全局變量的Map,Spring的源碼中大量使用了這種先將數(shù)據(jù)放入容器中等使用結(jié)束再銷毀的代碼風(fēng)格
    2022-07-07

最新評論

百色市| 夏邑县| 泗洪县| 五大连池市| 通州区| 青田县| 南昌县| 东港市| 丹阳市| 德惠市| 崇礼县| 成安县| 新蔡县| 东山县| 鹤山市| 林西县| 海南省| 承德县| 淅川县| 中阳县| 常宁市| 博乐市| 荥经县| 五原县| 望城县| 会泽县| 绍兴市| 洪洞县| 古田县| 太白县| 库伦旗| 哈尔滨市| 孝昌县| 布拖县| 宕昌县| 临江市| 柳州市| 布尔津县| 东阳市| 沐川县| 周至县|