【多線程】七、阻塞隊列

相關文章:
【多線程】一、線程狀態切換
【多線程】二、線程優先級&守護線程
【多線程】三、線程訪問變量
【多線程】四、線程異常抓捕
【多線程】五、線程池
【多線程】六、鎖與同步
【多線程】七、阻塞隊列
【多線程】八、異步計算結果獲取
【多線程】九、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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章