我們目前的課程任務規定,我們應該使用 "物件池管理器 "設計模式為執行緒池創建一個管理器,該管理器會產生一定數量的執行緒。這些執行緒的所有權應轉移到客戶端,然后在客戶端完成使用后再回傳到池中。如果池中沒有執行緒,那么客戶就必須等待。
我的困惑來自于這樣一個事實,即執行緒應該是不可重復使用的,這就違背了池化它們的目的。我對任務的理解是否有誤?
uj5u.com熱心網友回復:
只要執行緒沒有結束,就可以重復使用。一個執行緒池通常涉及到執行緒,它們在被賦予作業的時候進行作業,然后等待更多的作業。因此,除非明確告訴它們,否則它們永遠不會結束。訣竅在于將它們設計成這樣一種方式:它們被賦予的作業結束了,但執行緒本身并沒有。執行緒池很有用,因為創建/銷毀執行緒的成本通常比較高。
uj5u.com熱心網友回復:
@Kaliatech已經解釋了重復使用執行緒背后的概念。另外,"這些執行緒的所有權將被轉移到客戶端 "這句話有點誤導,因為執行緒的所有權通常留在執行緒池/物件池中,因為它是這個池子的管理者,客戶端應該簡單地將任務提交給池子,它可以成功完成也可以失敗。執行緒繼續運行,準備挑選下一個提交到池中的任務。作為一種設計,任務物件(Runnable/Callable)和代表執行緒執行的物件(Thread)的分離也被設計成不同。如果需要,執行緒池負責增加/減少執行緒的數量,因為創建和管理這些執行緒的成本很高。Java ThreadPoolExecutor將是一個很好的例子,可以參考這樣的執行緒池通常是如何作業的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/308338.html
標籤:
下一篇:如何列印同一元素的最長序列?
