2012-03-14 51 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