1. 程式人生 > >Java多執行緒-BlockingQueue(阻塞佇列)

Java多執行緒-BlockingQueue(阻塞佇列)

前言:
  BlockingQueue是多執行緒安全的佇列,它有兩種常見的阻塞場景。
  

  • 佇列中沒有資料的情況下,消費者端的所有執行緒都會被自動阻塞(掛起),直到有資料放入佇列。
  • 當佇列中填滿資料的情況下,生產者端的所有執行緒都會被自動阻塞(掛起),直到佇列中有空的位置,執行緒被自動喚醒。

BlockingQueue核心方法:
這裡寫圖片描述

  • 拋異常:如果試圖的操作無法立即執行,拋一個異常
  • 特定值:如果試圖的操作無法立即執行,返回一個特定的值(常常是 true / false)
  • 阻塞:如果試圖的操作無法立即執行,該方法呼叫將會發生阻塞,直到能夠執行
  • 超時:如果試圖的操作無法立即執行,該方法呼叫將會發生阻塞,直到能夠執行,但等待時間不會超過給定值。返回一個特定值以告知該操作是否成功(典型的是 true / false)

注意:
- BlockingQueue中無法放入null值(會丟擲NullPointerException異常)。
- 可以訪問BlockingQueue中的所有元素並對其進行相關操作,但需要注意的是,除了對對頭和對尾外,獲取其他元素的效率並不高(鑑於佇列的特徵)。
- 可以限定BlockingQueue的容量,也可以不限定。
- BlockingQueue是個介面,java.util.concurrent提供了一些BlockingQueue的子類,當然你也可以實現自己的子類。

相關推薦

Java執行-BlockingQueue(阻塞佇列)

前言:   BlockingQueue是多執行緒安全的佇列,它有兩種常見的阻塞場景。    佇列中沒有資料的情況下,消費者端的所有執行緒都會被自動阻塞(掛起),直到有資料放入佇列。 當佇列中填滿

java執行-03-阻塞佇列簡介

宣告 該系列文章只是記錄本人回顧java多執行緒程式設計時候記錄的筆記。文中所用語言並非嚴謹的專業術語(太嚴謹的術語其實本人也不會……)。難免有理解偏差的地方,歡迎指正。 另外,大神請繞路。不喜勿噴。 畢竟好記性不如爛筆頭嘛,而且許多東西只要不是

Java執行____BlockingQueue阻塞佇列使用

package com.frame.base.thread; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; /** * 併發程式設計

18_張孝祥_執行_阻塞佇列的應用

類相關屬性 介面BlockingQueue<E>定義: public interface BlockingQueue<E> extends Queue<E> { boolean add(E e);

執行消費阻塞佇列(生產者消費者模型)

一.幾種主要的阻塞佇列ArrayBlockingQueue:基於陣列實現的一個阻塞佇列,在建立ArrayBlockingQueue物件時必須制定容量大小。並且可以指定公平性與非公平性,預設情況下為非公平的,即不保證等待時間最長的佇列最優先能夠訪問佇列。LinkedBlocki

thrift java執行阻塞同步/非同步呼叫例項

作者:呂桂強 郵箱:[email protected] 首先建立thrift檔案 namespace java thriftservice Hello{  string helloString(1:string para)} 執行thrift -ge

Java執行-生產者消費者例子-使用阻塞佇列BlockingQueue)實現

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** * Created by wisgood . */ public

(八) Java執行詳解之阻塞佇列BlockingQueue佇列優先順序詳解

阻塞佇列 阻塞佇列與普通佇列的區別在於當佇列是空時從佇列中獲取元素的操作將會被阻塞,或者當佇列是滿時往佇列裡新增元素的操作會被阻塞。試圖從空的阻塞佇列中獲取元素的執行緒將會被阻塞,直到其他的執行緒往空的佇列插入新的元素,同樣試圖往已滿的阻塞佇列中新增新元素的執

Java執行/併發26、阻塞佇列BlockingQueue

BlockingQueue介面定義了一種佇列,這種佇列通常容量是提前固定(確定了容量大小)的。容量滿時往BlockingQueue中新增資料時會造成阻塞,容量為空時取元素操作會阻塞。 我們可以認為BlockingQueue佇列是一個水庫。水庫滿了的時侯,上游的

java執行使用BlockingQueue阻塞佇列實現互斥同步通訊

package com.study; import java.util.concurrent.ArrayBlockingQu

Java執行---阻塞佇列詳解(舉例說明)

一. 前言   在新增的Concurrent包中,BlockingQueue很好的解決了多執行緒中,如何高效安全“傳輸”資料的問題。通過這些高效並且執行緒安全的佇列類,為我們快速搭建高質量的多執行緒程式帶來極大的便利。本文詳細介紹了BlockingQueue家庭中的所有成員

Java執行程式設計---java5阻塞佇列

java5阻塞佇列的應用        佇列包含固定長度的佇列和不固定長度的佇列,先進先出。        固定長度的佇列往裡放資料,如果放滿了還要放,阻塞式佇列就會等待,直到有資料取出,空出位置後才繼續放;非阻塞式佇列不能等待就只能報錯了。        講Conditio

Java執行 阻塞佇列和併發集合

本章主要探討在多執行緒程式中與集合相關的內容。在多執行緒程式中,如果使用普通集合往往會造成資料錯誤,甚至造成程式崩潰。Java為多執行緒專門提供了特有的執行緒安全的集合類,通過下面的學習,您需要掌握這些集合的特點是什麼,底層實現如何、在何時使用等問題。 3.1Blockin

Java執行之模擬一個阻塞佇列

import java.util.LinkedList; import java.util.concurrent.atomic.AtomicInteger; public class MyQueue { private final LinkedLi

java執行併發處理之阻塞佇列LinkedBlockingQueue用法

<pre name="code" class="java">public class ThreadRelatedService2 { // key point: records list must be ordered public void

Java執行(十三):BlockingQueue-執行阻塞佇列

   BlockingQueue作為執行緒容器,可以為執行緒同步提供有力的保障,其主要用到的方法包括: add(E o); //將指定的元素新增到此佇列中(如果立即可行),在成功時返回 true,其他情況則丟擲 IllegalStateException。 drainTo

Java執行中的阻塞佇列和併發集合

 本章主要探討在多執行緒程式中與集合相關的內容。在多執行緒程式中,如果使用普通集合往往會造成資料錯誤,甚至造成程式崩潰。Java為多執行緒專門提供了特有的執行緒安全的集合類,通過下面的學習,您需要掌握這些集合的特點是什麼,底層實現如何、在何時使用等問題。 3.1 Blo

跟我學Java執行——執行池與阻塞佇列

前言     上一篇文章中我們將ThreadPoolExecutor進行了深入的學習和介紹,實際上我們在專案中應用的時候很少有直接應用ThreadPoolExecutor來建立執行緒池的,在jdk的api中有這麼一句話“但是,強烈建議程式設計師使用較為方便的 Execu

最全java執行總結3——瞭解阻塞佇列執行安全集合不

  看了前兩篇你肯定已經理解了 java 併發程式設計的低層構建。然而,在實際程式設計中,應該經可能的遠離低層結構,畢竟太底層的東西用起來是比較容易出錯的,特別是併發程式設計,既難以除錯,也難以發現問題,我們還是使用由併發處理的專業人員實現的較高層次的結構要方便、安全得多。 阻塞佇列   對於許多執行緒問題,

JAVA執行使用JDK1.5提供的Lock,Condition手寫阻塞佇列

package com.study; import java.util.Random; import java.util.