java多线程总结五:线程池的原理及实现
1、線程池簡介:
??? 多線程技術主要解決處理器單元內多個線程執行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。????
??? 假設一個服務器完成一項任務所需時間為:T1 創建線程時間,T2 在線程中執行任務的時間,T3 銷毀線程時間。
??? 如果:T1 + T3 遠大于 T2,則可以采用線程池,以提高服務器性能。
??????????????? 一個線程池包括以下四個基本組成部分:
??????????????? 1、線程池管理器(ThreadPool):用于創建并管理線程池,包括 創建線程池,銷毀線程池,添加新任務;
??????????????? 2、工作線程(PoolWorker):線程池中線程,在沒有任務時處于等待狀態,可以循環的執行任務;
??????????????? 3、任務接口(Task):每個任務必須實現的接口,以供工作線程調度任務的執行,它主要規定了任務的入口,任務執行完后的收尾工作,任務的執行狀態等;
??????????????? 4、任務隊列(taskQueue):用于存放沒有處理的任務。提供一種緩沖機制。
????????????????
??? 線程池技術正是關注如何縮短或調整T1,T3時間的技術,從而提高服務器程序性能的。它把T1,T3分別安排在服務器程序的啟動和結束的時間段或者一些空閑的時間段,這樣在服務器程序處理客戶請求時,不會有T1,T3的開銷了。
??? 線程池不僅調整T1,T3產生的時間段,而且它還顯著減少了創建線程的數目,看一個例子:
??? 假設一個服務器一天要處理50000個請求,并且每個請求需要一個單獨的線程完成。在線程池中,線程數一般是固定的,所以產生線程總數不會超過線程池中線程的數目,而如果服務器不利用線程池來處理這些請求則線程總數為50000。一般線程池大小是遠小于50000。所以利用線程池的服務器程序不會為了創建50000而在處理請求時浪費時間,從而提高效率。
??? 代碼實現中并沒有實現任務接口,而是把Runnable對象加入到線程池管理器(ThreadPool),然后剩下的事情就由線程池管理器(ThreadPool)來完成了
?
[java]?view plaincopy?
測試代碼:
[java]?view plaincopy
?
運行結果:
WorkThread number:3? finished task number:0? wait task number:6
任務 1 完成
任務 2 完成
任務 3 完成
任務 4 完成
任務 5 完成
任務 6 完成
WorkThread number:3? finished task number:6? wait task number:0
分析:由于并沒有任務接口,傳入的可以是自定義的任何任務,所以線程池并不能準確的判斷該任務是否真正的已經完成(真正完成該任務是這個任務的run方法執行完畢),只能知道該任務已經出了任務隊列,正在執行或者已經完成。
?
2、java類庫中提供的線程池簡介:
???? java提供的線程池更加強大,相信理解線程池的工作原理,看類庫中的線程池就不會感到陌生了。
?
?
?
?
?
其他具體內容查看jdk幫助或看jdk源代碼吧。。。
參考文章:http://hi.baidu.com/obullxl/blog/item/ee50ad1ba8e8ff1f8718bf66.html
轉載于:https://www.cnblogs.com/kinghitomi/archive/2012/01/19/2327418.html
總結
以上是生活随笔為你收集整理的java多线程总结五:线程池的原理及实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 1999
- 下一篇: WebBrowser1.Navigate