阻塞隊列--LinkedBlockingQueue


什么叫線程安全?
線程安全就是每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的。
線程安全就是說多線程訪問同一代碼,不會產生不確定的結果。

並行和並發區別
1、並行是指兩者同時執行一件事,比如賽跑,兩個人都在不停的往前跑;
2、並發是指資源有限的情況下,兩者交替輪流使用資源,比如一段路(單核CPU資源)同時只能過一個人,A走一段后,讓給B,B用完繼續給A,交替使用,目的是提高效率。

LinkedBlockingQueue是一個線程安全的阻塞隊列,實現了先進先出等特性,是作為生產者消費者的首選,可以指定容量,也可以不指定,不指定的話默認最大是Integer.MAX_VALUE,其中主要用到put和take方法,put方法將一個對象放到隊列尾部,在隊列滿的時候會阻塞直到有隊列成員被消費,take方法從head取一個對象,在隊列為空的時候會阻塞,直到有隊列成員被放進來。

常用方法如下:
add(anObject):
把anObject添加到BlockingQueue里,添加成功返回true,如果BlockingQueue空間已滿則拋出異常。
offer(anObject):
表示如果可能的話,將anObject加到BlockingQueue里,即如果BlockingQueue可以容納,則返回true,否則返回false。
put(anObject):
把anObject加到BlockingQueue里,如果BlockingQueue沒有空間,則調用此方法的線程被阻斷直到BlockingQueue里有空間再繼續。
poll(time):
獲取並移除此隊列的頭,若不能立即取出,則可以等time參數規定的時間,取不到時返回null。
take():
獲取BlockingQueue里排在首位的對象,若BlockingQueue為空,阻斷進入等待狀態直到BlockingQueue有新的對象被加入為止。
clear():
從隊列徹底移除所有元素。
remove()方法直接刪除隊頭的元素
peek()方法直接取出隊頭的元素,並不刪除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM