相關文章:
【多線程】一、線程狀態切換
【多線程】二、線程優先級&守護線程
【多線程】三、線程訪問變量
【多線程】四、線程異常抓捕
【多線程】五、線程池
【多線程】六、鎖與同步
【多線程】七、阻塞隊列
【多線程】八、異步計算結果獲取
【多線程】九、Android異步任務
BlockingQueue
// 非阻塞方法:
boolean offer(e[,timeout, timeUnit]); // 添加,失敗返回false;
E poll([timeout, timeUnit]); // 取出,失敗返回null
// 阻塞線程方法:
put(e); // 添加,若空間不足則阻塞直到添加成功
E take(); // 取出,若爲空則阻塞直到有數據
int drainTo(collection[,maxn]); // 取出所有可用對象,無須多次加鎖或釋放,可提效率
阻塞隊列 | 特性 |
---|---|
ArrayBlockingQueue | 有界數組結構,爲保證吞吐量默認不公平訪問 |
LinkedBlockingQueue | 鏈表(INT_MAX)結構,生產消費分鎖以保證效率 |
PriorityBlockingQueue | 無界隊列,支持自定義不穩定排序 |
SynchronousQueue | 空阻塞隊列 |
DelayQueue | 堆實現,支持延時獲取,只有在超時後才能取出 |
LinkedBlockingDeque | 雙向鏈表,支持雙向操作減少競爭 |
LinkedTransferQueue | 無界鏈表transfer(e) :• 若存在消費線程等待,則立刻將元素傳遞給消費者; • 否則元素插入隊尾,阻塞生產線程,直到有消費者取走; tryTransfer(e) :• 若存在消費線程等待,則立刻將元素傳遞給消費者; • 否則返回false,元素不進隊列; tryTransfer(e,timeout,timeUnit) :• 若存在消費線程等待,則立刻將元素傳遞給消費者; • 否則數據插入隊尾,並等待指定時長,此中若被取走返回true,否則返回false; |