【问题标题】:Android Thread Pool to manage multiple bluetooth handeling threads?Android线程池管理多个蓝牙处理线程?
【发布时间】:2012-03-31 05:35:22
【问题描述】:

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

【问题讨论】:

  • 您可以将Threads 放入一个数组或List。它们只是对象。

标签: java android multithreading bluetooth threadpool


【解决方案1】:

一个线程池的建立是基于这样的想法,因为一遍又一遍地创建线程是耗时的,我们应该尽可能地回收它们。因此,线程池是执行作业的线程的集合,但在它们完成作业时不会被销毁,而是“返回池”并接受另一个作业或在无事可做时处于空闲状态。

通常,底层实现是一个线程安全队列,程序员将作业放入其中,并且由该实现管理的一堆线程不断轮询(我并不是说必须忙于旋转)队列以进行工作。

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

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

请注意,由于线程池线程以上述方式运行(即被回收),在固定线程池的情况下,不建议有执行阻塞 I/O 操作的作业,因为线程占用那些作业将有效地从池中删除,直到它们完成作业,因此您可能会遇到死锁。

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

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

【讨论】:

  • 感谢您的回答,我可能会使用缓存线程池。另外,我所有的线程都会持续运行,并且每个线程都会有一个阻塞调用,你认为我还应该使用线程池吗?
  • 好吧,您仍然可以使用缓存线程池,因为如果没有更多可用线程,它将创建新线程。相对于普通线程的好处是更容易管理。
  • “普通线程”是什么意思。线程池不只是像数组一样存储线程吗?还是线程池本身就是线程?
  • 普通线程是指使用Thread 类手动创建的线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
相关资源
最近更新 更多