1. 程式人生 > >JAVA基礎24-多執行緒(四)【讀寫鎖,阻塞佇列,執行緒池】

JAVA基礎24-多執行緒(四)【讀寫鎖,阻塞佇列,執行緒池】

一、讀寫鎖

 

使用步驟

二、阻塞佇列 (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:降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。 
   :提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。 
   3:提高執行緒的可管理性。  

3-3 執行器(Executor)

  

關於:newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor