Android线程池管理多个蓝牙handeling线程?

时间:2012-03-14 17:55:59

标签: java android multithreading bluetooth threadpool

所以我有我的Android蓝牙应用程序,它有主机和客户端。问题是,因为我正在建立多个连接,所以我需要一个线程来处理每个连接。这都是milk'n'cookies,所以我想我会把所有线程都放在一个数组中。一个小小的研究表明,更好的方法是使用线程池,但我似乎无法理解其工作原理。另外,实际上甚至可以在数组中保存线程吗?

1 个答案:

答案 0 :(得分:2)

线程池是围绕这样的想法构建的,因为一遍又一遍地创建线程非常耗时,我们应该尝试尽可能地回收它们。因此,线程池是执行作业的线程集合,但在完成作业时不会被销毁,而是“#34;返回池中”#34;如果无事可做,可以选择其他工作或闲着。

通常,底层实现是一个线程安全的队列,程序员在其中放置作业,并且由实现管理的一堆线程保持轮询(我并不意味着必须忙着旋转)工作队列。

在Java中,线程池由ExecutorService类表示,可以是:

  • 已修复 - 创建具有固定线程数的线程池
  • 缓存 - 根据需要动态创建和销毁线程
  • 单一 - 具有单线程的池

请注意,由于线程池线程以上述方式运行(即被回收),因此在固定线程池的情况下,不建议使用阻塞I / O操作的作业,因为线程采用那些工作将被有效地从池中移除,直到他们完成工作,因此你可能会陷入僵局。

对于线程数组,它就像创建任何对象数组一样简单:

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