阻塞佇列--LinkedBlockingQueue

weixin_30924079發表於2020-04-04

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

並行和併發區別
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()方法直接取出隊頭的元素,並不刪除

轉載於:https://www.cnblogs.com/linjiqin/p/5128048.html

相關文章