2012-03-14 54 views
2

所以我有了它的主機和客戶端我的Android藍牙應用。問題是,因爲我正在建立多個連接,所以我需要一個線程來處理每個連接。這都是牛奶,所以我想我會把所有的線程都粘在一個數組中。一個小小的研究表明,一個更好的方法是使用線程池,但我似乎無法理解它的工作原理。另外,實際上甚至可以在數組中保存線程?Android線程池管理多個藍牙handeling線程?

+0

你可以把'Thread's在一個數組或一個'List'。他們只是對象。 – Gray 2012-03-14 17:57:34

回答

2

線程池周圍的想法,因爲一遍一遍地創建線程是耗時的建成,我們應該嘗試儘可能多地回收。因此,一個線程池是執行的作業,但是當他們完成一個任務沒有被破壞,而是線程的集合「重返池」,要麼採取另外的工作或處於閒置狀態,如果沒有什麼做的。

通常底層的實現是在程序員把工作線程安全的隊列和一堆被實施託管線程保持輪詢(我沒有暗示忙紡必然)工作隊列中。

在Java線程池由ExecutorService類表示,其可以是:

  • 固定 - 創建線程池具有固定數目的線程
  • 緩存 - 動態地創建和銷燬線程根據需要
  • 單 - 一個通過單個線程

注池,由於線程池中的線程在以上(即再循環)描述的,在第方式操作不建議有那些阻塞I/O操作,因爲採取這些工作線程將從池中被有效地去除,直到他們完成作業的工作,因此你可能有死鎖固定的線程池電子情況。

至於線程的陣列,這是因爲在創建任何對象數組一樣簡單:

Thread[] threads = new Thread[10]; // array of 10 threads 
+0

感謝您的回答,我可能會使用緩存線程池。另外,我的所有線程都會不斷運行,並且每個線程都會有一個阻塞調用,您認爲我仍然應該使用線程池嗎? – Zizo47 2012-03-14 19:08:09

+0

嗯,你仍然可以使用緩存的線程池,因爲如果沒有更多可用的線程會造成新的問題。與普通線程相關的好處是管理起來更容易。 – Tudor 2012-03-14 19:44:43

+1

你是什麼意思的「正常線程」。不要線程池像數組一樣存儲線程?還是線程池自己線程? – Zizo47 2012-03-14 20:00:13