設計模式 執行緒池模式

2021-09-16 12:39:21 字數 1612 閱讀 7254

定義:

worker thread的角色:

例項應用

利用同步塊來處理,vector容器來儲存客戶端請求。利用vector來儲存,依舊是每次集合的最後乙個位置新增請求,從開始位置移除請求來處理。在channel有快取請求方法和處理請求方法,利用生成者與消費者模式來處理儲存請求,利用正向等待來判斷任務池的非空狀態。

**實現:

public class channel 

//接受新的任務,並且將其儲存在vector中

object task = new object();//模擬的任務實體類

//此處省略具體工作

//在網路程式設計中,這裡就是利用serversocket來利用serversocket.accept接受乙個socket從而喚醒執行緒

//當有具體的請求達到

synchronized(pool)

//注意上面這步驟新增任務池請求,以及通知執行緒,都可以放在工作執行緒內部實現

//只需要定義該方法為static,在方法體用同步塊,且共享的執行緒池也是static即可

//下面這步,可以有可以沒有根據實際情況

//取消等待的執行緒

for(int i = 0; i < workers.length; i++)

}}

這個主要的作用如下

定義兩個集合,乙個是存放客戶端請求的,利用vector;乙個是儲存執行緒的,就是執行緒池中的執行緒數目。

vector是執行緒安全的,它實現了collection和list,可以實現可增長的物件陣列。

與陣列一樣,它包含可以使用整數索引進行訪問的元件。但vector 的大小可以根據需要增大或縮小,以適應建立 vector 後進行新增或移除項的操作。

collection中主要包括了list相關的集合以及set相關的集合,queue相關的集合。

public class workerthread extends thread 

//利用靜態synchronized來作為整個synchronized類方法,僅能同時乙個操作該類的這個方法

private static synchronized void incrementfilescompressed()

public void run()

catch(interruptedexception e)

}

pool.remove(0);//獲取任務池中的任務,並且要進行轉換

}//下面是執行緒所要處理的具體工作}}

}

在保證無限迴圈等待時,通過共享互斥來訪問pool變數。當執行緒被喚醒,需要重新獲取pool的鎖,再次執行synchronized**塊中其餘的工作;當不為空的時候,繼續再判斷是否為空,如果不為空,則跳出迴圈。必須先從任務池中移除乙個任務來執行,統一用從末尾新增,從開始處移除

執行緒池模式在實際程式設計中應用的很多,如資料庫連線池,socket長連線等等。通過一定數量的工作者執行緒去執行不斷被提交的任務,節約了執行緒這種有限且昂貴的資源。該模式有以下幾個好處:

但是要用好執行緒池模式,還需要考慮如下的問題:

執行緒池和設計模式

執行緒池 一種執行緒使用模式。執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池維護著多個 執行緒,等待著監督管理者分配可併發執行的任務。這避免了在處理短時間任務時建立與銷毀執行緒的代價。執行緒池不僅能夠保證核心的充分利用,還能防止過分排程。應 用 需要大量的執行緒來完成任務,且完...

設計模式 物件池模式

物件池模式,也稱物件池服務,通過迴圈使用物件,減少資源在初始化和釋放時的昂貴損耗。簡單地說,在需要時,從池中提取 不用時,放回池中,等待下乙個請求。典型例子是連線池和執行緒池。從hashtable中取出空閒元素 public synchronized t checkout return null 歸...

懶漢模式 餓漢模式 執行緒池例項

單例設計模式 保證類在記憶體中只有乙個物件 餓漢式 class singleton 2,宣告乙個引用 private static singleton s new singleton 3,對外提供公共的訪問方法 public static singleton getinstance 懶漢式 clas...