執行緒池的那些事

2021-09-07 08:16:35 字數 2123 閱讀 8043

一般我們進行執行緒的操作時,往往要建立乙個新的執行緒,執行完畢後再銷毀,等到有新的執行命令時,又得重新建立執行緒,如此一來顯得十分繁瑣,如果我們將之前執行過的執行緒不銷毀而是放入乙個池子中,當需要執行時直接引用它,這就能省下許多操作的步驟與時間,因此不會由於等待建立執行緒而延遲任務的執行,從而提高了響應性,同時還可以防止過多執行緒相互競爭資源而使應用程式耗盡記憶體而失敗,提高執行緒的可管理性。

一般乙個簡單執行緒池至少包含下列組成部分。

1. 執行緒池管理器(threadpoolmanager):用於建立並管理執行緒池

2. 工作執行緒(workthread):執行緒池中線程

3. 任務介面(task):每個任務必須實現的介面,以供工作執行緒排程任務的執行。

4. 任務佇列:用於存放沒有處理的任務。提供一種緩衝機制。

執行緒池管理器至少有下列功能:建立執行緒池,銷毀執行緒池,新增新任務

public class threadpoolmanager 

}void shutdown()

for (int i = 0; i < threadcount; i++)

}void execute(runnable newtask)

}private class workthread extends thread

catch (interruptedexception e)

}task.run();}}

}}

public class threadpoolexecutor extends abstractexecutorservice 

public abstract class abstractexecutorservice implements executorservice

public threadpoolexecutor(int corepoolsize,//執行緒池的基本大小

int maximumpoolsize,//最大值

long keepalivetime,//存活時間

timeunit unit,//引數keepalivetime的時間單位,有7種取值

blockingqueueworkqueue,//乙個阻塞佇列,儲存等待執行的任務

threadfactory threadfactory,//建立新執行緒時使用的工廠

rejectedexecutionhandler handler//表示當拒絕處理任務時的策略

)

execute()方法:是executor中宣告的方法,在threadpoolexecutor進行了具體的實現,這個方法是threadpoolexecutor的核心方法,通過這個方法可以向執行緒池提交乙個任務,交由執行緒池去執行。

shutdown()和shutdownnow()是用來關閉執行緒池的。

下面用兩個例子介紹執行緒池的使用方法,第乙個例子會建立乙個固定大小的執行緒池,第二個例子會建立基於時間執行緒池。

第乙個例子 :   

executorservice pool = executors.newfixedthreadpool(2);

//建立四個任務

thread t1 = new task1();

thread t2 = new task2();

thread t3 = new task3();

thread t4 = new task4();

//放入執行緒池

pool.execute(t1);

pool.execute(t2);

pool.execute(t3);

pool.execute(t4);

pool.shutdown(); //關閉執行緒池

第二個例子:      

executorservice pool = executors.newscheduledthreadpool(4);

thread t = new task();

pool.scheduleatfixedrate(t,1, 5, timeunit.seconds);

多執行緒那些事

其實在所有的軟體開發人員心裡應該有乙個開發準則,那就是錙銖必較。就是對於效能和速度的要求是我們不斷努力的方向。多執行緒就是為了實現我們對計算機硬體的最大化利用和並行處理而提出來的解決方案。當然對效能的要求就帶來了複雜的演算法處理方案。但是其他方面的效能優化也為我們的多執行緒程式設計引入了新的麻煩。首...

java多執行緒那些事

多執行緒那些事 0.多執行緒實現兩種方式 1 new thread public void run start 2 new thread new runnable start 推薦第二種,物件導向,1.synchronzied加誰身上鎖住誰,而且還是個悲觀鎖,但是確實能解決多執行緒同步問題,就是效率...

MFC執行緒同步那些事

題目有點大,其實主要講述執行緒執行及退出時遇到的一些問題和解決辦法以及注意事項。乙個工業控制專案,用usb口採集資料,程式結構是主程序負責介面和演算法,建立乙個子執行緒負責usb通訊,讀取資料,死迴圈。參考mfc的執行緒演練編制,以下根據 逐行說明 1.啟動執行緒 用afxbeginthread c...