阻塞隊列--LinkedBlockingQueue

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

並行和併發區別
一、並行是指二者同時執行一件事,好比賽跑,兩我的都在不停的往前跑;
二、併發是指資源有限的狀況下,二者交替輪流使用資源,好比一段路(單核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()方法直接取出隊頭的元素,並不刪除線程

相關文章
相關標籤/搜索