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

java阻塞隊(duì)列實(shí)現(xiàn)原理及實(shí)例解析

 更新時(shí)間:2019年11月08日 11:03:29   作者:yaphetsfang  
這篇文章主要介紹了java阻塞隊(duì)列實(shí)現(xiàn)原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了java阻塞隊(duì)列實(shí)現(xiàn)原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

阻塞隊(duì)列與普通隊(duì)列的不同在于。當(dāng)隊(duì)列是空的時(shí)候,從隊(duì)列中獲取元素的操作將會被阻塞,或者當(dāng)隊(duì)列滿時(shí),往隊(duì)列里面添加元素將會被阻塞。試圖從空的阻塞隊(duì)列中獲取元素的線程將會被阻塞,直到其他的線程往空的隊(duì)列插入新的元素。同樣,試圖往已滿的阻塞隊(duì)列中添加新元素的線程同樣也會被阻塞,直到其他的線程使隊(duì)列重新變得空閑起來,如從隊(duì)列中移除一個(gè)或者多個(gè)元素,或者完全清空隊(duì)列,下圖展示了如何通過阻塞隊(duì)列來合作:

線程1往阻塞隊(duì)列中添加元素,而線程2從阻塞隊(duì)列中移除元素

從5.0開始,JDK在Java.util.concurrent包里提供了阻塞隊(duì)列的官方實(shí)現(xiàn)。盡管JDK中已經(jīng)包含了阻塞隊(duì)列的官方實(shí)現(xiàn)。

阻塞隊(duì)列的實(shí)現(xiàn)

阻塞隊(duì)列的實(shí)現(xiàn)類似于帶上限的Semaphore的實(shí)現(xiàn)。

廢話不多說:

package com.huojg.test;
import java.util.LinkedList;
import java.util.List;
public class BlockingQueue { 
   private List queue = new LinkedList(); 
   private int limit = 10;    
   public BlockingQueue(int limit){ 
    this.limit = limit; 
   }      
   public synchronized void enqueue(Object item) 
   throws InterruptedException { 
    while(this.queue.size() == this.limit) { 
     wait(); 
    } 
    if(this.queue.size() == 0) { 
     notifyAll(); 
    } 
    this.queue.add(item); 
   }   
   public synchronized Object dequeue() 
   throws InterruptedException{ 
    while(this.queue.size() == 0){ 
     wait(); 
    } 
    if(this.queue.size() == this.limit){ 
     notifyAll(); 
    } 
    return this.queue.remove(0); 
   } 
  } 

必須注意到,在enqueue和dequeue方法內(nèi)部,只有隊(duì)列的大小等于上限(limit)或者下限(0)時(shí),才調(diào)用notifyAll方法。如果隊(duì)列的大小既不等于上限,也不等于下限,任何線程調(diào)用enqueue或者dequeue方法時(shí),都不會阻塞,都能夠正常的往隊(duì)列中添加或者移除元素。

在Java中,對于Lock和Condition可以理解為對傳統(tǒng)的synchronized和wait/notify機(jī)制的替代。

wait/notify有個(gè)限制,調(diào)用wait/notify的線程必須持有對象的鎖。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis基于MapperScan注解的動態(tài)代理加載機(jī)制詳解

    Mybatis基于MapperScan注解的動態(tài)代理加載機(jī)制詳解

    這篇文章主要介紹了Mybatis基于MapperScan注解的動態(tài)代理加載機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 淺談Spring Boot中Redis緩存還能這么用

    淺談Spring Boot中Redis緩存還能這么用

    這篇文章主要介紹了淺談Spring Boot中Redis緩存還能這么用,這種方式是Spring Cache提供的統(tǒng)一接口,實(shí)現(xiàn)既可以是Redis,也可以是Ehcache或者其他支持這種規(guī)范的緩存框架,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Nacos配置中心設(shè)計(jì)原理分析

    Nacos配置中心設(shè)計(jì)原理分析

    今天分享一下Nacos配置變更的相關(guān)知識點(diǎn),現(xiàn)在使用Java生態(tài)如果使用微服務(wù),如果部署在K8s上,那么可能會使用ConfigMap來存儲配置文件,如果沒有使用K8s,那么基本上都使用Nacos來做配置中心,所以有必要了解一下Nacos的配置的知識點(diǎn),本文只是對其中的部分實(shí)現(xiàn)原理進(jìn)行分析
    2023-10-10
  • java中equals和等號(==)的區(qū)別淺談

    java中equals和等號(==)的區(qū)別淺談

    java中equals和等號(==)的區(qū)別淺談,需要的朋友可以參考一下
    2013-05-05
  • spring @EventListener 事件與監(jiān)聽的示例詳解

    spring @EventListener 事件與監(jiān)聽的示例詳解

    本文介紹了自定義Spring事件和監(jiān)聽器的方法,包括如何發(fā)布事件、監(jiān)聽事件以及如何處理異步事件,通過示例代碼和日志,展示了事件的順序執(zhí)行和異步處理機(jī)制,感興趣的朋友一起看看吧
    2025-03-03
  • MyBatis一對一映射初識教程

    MyBatis一對一映射初識教程

    MyBatis是一個(gè)支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。在我們生活中一對一的例子很多見,下面通過本文給大家?guī)砹薽ybatis一對一映射初識教程,感興趣的朋友一起看下吧
    2016-08-08
  • SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動態(tài)索引

    SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動態(tài)索引

    這篇文章主要介紹了SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動態(tài)索引,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • Springcloud GateWay網(wǎng)關(guān)配置過程圖解

    Springcloud GateWay網(wǎng)關(guān)配置過程圖解

    這篇文章主要介紹了Springcloud GateWay網(wǎng)關(guān)配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • maven+阿里云創(chuàng)建國內(nèi)鏡像的中央倉庫(親測可用)

    maven+阿里云創(chuàng)建國內(nèi)鏡像的中央倉庫(親測可用)

    本篇文章主要介紹了maven+阿里云創(chuàng)建國內(nèi)鏡像的中央倉庫(親測可用),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • mybatis?plus常用注解的具體使用

    mybatis?plus常用注解的具體使用

    本文主要介紹了mybatis?plus常用注解的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評論