2011-07-06 75 views
4

任何人都可以引導我使用關於線程和線程池的例子嗎?它們之間有什麼區別?哪個最適合...?它的缺點是什麼線程和線程池之間的區別

+2

你看[這裏](http://download.oracle.com/javase/tutorial/essential/concurrency/index.html)? –

回答

10

由於線程只能運行一次,所以你必須爲每個任務使用一個線程。但是,創建和啓動線程有點昂貴,並且可能導致太多線程在等待執行(現在不記得此名稱的確切名稱) - 這進一步降低了性能。

線程池 - 顧名思義 - 一個始終運行的工作線程池。那些線程通常從列表中獲取任務,執行它們,然後嘗試執行下一個任務。如果沒有任務,線程將等待。

使用線程池有幾個優點:

  • 您不必創建每個任務
  • 你通常有最佳線程數爲您的系統線程(取決於JVM太)
  • 您可以專注於寫作任務,並使用線程池來管理基礎設施

編輯:這裏是一些併發相當不錯的文章一般:Sutter's Mill,查看更多鏈接的底部。雖然它們主要是爲C/C++編寫的,但一般概念是相同的,因爲它也描述了併發解決方案和硬件之間的相互依賴性。瞭解併發性能問題的好文章是this article on drdobbs.com

+0

由於其漂亮和清楚明白..你可以指導我通過舉一個簡單的例子 –

+0

「太多的線程在等待執行(不記得確切的名字爲這個現在)」。您正在尋找「飢餓」這個詞嗎? – SteeveDroz

+0

@Otatur'starvation'就是這個的一個症狀,因爲它意味着一個線程不會獲得它所需要的資源(比如CPU時間)。 'oversubscription'似乎是我正在尋找的術語。 – Thomas

3

線程池是分配用於執行統一任務的線程的集合。 使用線程池模式的優點是您可以定義允許多少個線程同時執行。這是爲了避免由於CPU負載過高或內存不足而導致服務器崩潰,例如服務器的硬件容量只能支持每秒100個請求。

數據庫池與線程池有相似的概念。

該模式廣泛應用於大多數後端服務器的應用程序中。

雖然線程是執行任務的單元。

相關問題