手動實現執行緒池

2021-09-29 22:58:01 字數 403 閱讀 5690

通過手寫執行緒池,理解了以下問題:

1.當任務堆滿阻塞佇列後,執行緒池會new新的執行緒來處理新的任務,直到執行緒數量達到最大值。這些新new出來的執行緒什麼時候銷毀呢?

答:new出新執行緒後,這些執行緒同核心執行緒一樣,處理阻塞佇列裡面的任務,阻塞佇列裡面任務處理完了後,新new出來的執行緒在等待設定的時間後,進行銷毀,核心執行緒繼續存活。

2.比核心執行緒池數多的執行緒如何實現等待設定的時間後就銷毀呢?

答案是:

當執行workqueue.take()方法時,如果佇列中無任務,則執行緒會被阻塞在這裡,直到有任務時,才會繼續執行。

當執行workqueue.poll()方法時,如果佇列中無任務,則會在等待對應保活時間過,返回null,返回 null 之後在上文的 run() 中就會退出這個執行緒,從而達到了**執行緒的目的。

實現執行緒池

1.執行緒池優點 1 減少建立和銷毀執行緒的次數 2 可以根據系統的能力,調整執行緒池中線程的數目 3 減少切換執行緒的開銷 2.實現自定義執行緒池 思路 public class threadpool extends threadgroup 加入任務 public synchronized voi...

c 執行緒池實現(四)執行緒池實現

前面已經說到了同步佇列的實現,下面來看執行緒池的實現。ifndef include threadpool define include threadpool include include include include include syncqueue.hpp namespace mythrea...

請使用執行緒池建立執行緒,而勿手動建立執行緒

在中大型專案中,不可避免地需要執行非同步任務,而非同步任務的執行則是通過執行緒而執行的,因此掌握執行緒是如何建立的則是執行非同步任務的第一步。我們知道,常見的建立執行緒的方式有 繼承thread類,重寫run 方法 實現runnable介面,重寫run 方法 使用執行緒池建立執行緒 public c...