JAVA基礎24-多執行緒(四)【讀寫鎖,阻塞佇列,執行緒池】
阿新 • • 發佈:2018-12-22
一、讀寫鎖
使用步驟
二、阻塞佇列 (BlockingQueue)
提供執行緒安全的佇列訪問方式;
當阻塞佇列進行插入資料時,若佇列滿,則執行緒阻塞,直到佇列非滿的時候
當阻塞佇列取資料時,若佇列為空,則執行緒阻塞直到佇列非空時候。
阻塞佇列,常用於“生產者和消費者”的場景,生產者往佇列中新增元素,消費者往佇列中拿出元素。
方法\處理方式 | 丟擲異常 | 返回特殊值 | 一直阻塞 | 超出退出 |
---|---|---|---|---|
插入 | add(e) |
offer(e) | put(e) | offer(e,time,unit) |
刪除 | remove() | poll() | take() | poll(time,unit) |
檢查方法 | element() | peek() | 不可用 | 不可用 |
- 超時退出:當阻塞佇列滿時,佇列會阻塞生產者執行緒一段時間,如果超過一定的時間,生產者執行緒就會退出。
JDK7提供了7個阻塞佇列。分別是
- ArrayBlockingQueue :一個由陣列結構組成的有界阻塞佇列。
- LinkedBlockingQueue :一個由連結串列結構組成的有界阻塞佇列。
- PriorityBlockingQueue :一個支援優先順序排序的無界阻塞佇列。
- DelayQueue:一個使用優先順序佇列實現的無界阻塞佇列。
- SynchronousQueue:一個不儲存元素的阻塞佇列。
- LinkedTransferQueue:一個由連結串列結構組成的無界阻塞佇列。
- LinkedBlockingDeque:一個由連結串列結構組成的雙向阻塞佇列。
三.執行緒池
當程式需要建立大量生命週期較短的執行緒時,如果頻繁建立和銷燬執行緒,會影響效能,甚至導致JVM崩潰。
3-1 概念:
執行緒池中包括許多準備執行的空閒執行緒,將Runable交給執行緒池,即使run方法已經執行完,執行緒不會死亡。而是等待下一個Run方法到來
3-2 作用:
1:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。
2 :提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。
3:提高執行緒的可管理性。
3-3 執行器(Executor)
關於:newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor