java - Android线程池管理多个蓝牙处理线程?

标签 java android multithreading bluetooth threadpool

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

最佳答案

线程池的构建理念是,由于一遍又一遍地创建线程非常耗时,因此我们应该尽可能地回收它们。因此,线程池是执行作业的线程的集合,但在完成作业时不会被销毁,而是“返回到池中”并执行另一个作业或在无事可做时闲置。

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

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

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

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

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

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

关于java - Android线程池管理多个蓝牙处理线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707395/

相关文章:

java - IE 8 中不一致的 GWT 行为

android - Android-如何将歌曲设置为铃声或原始文件夹中的通知?

java - 什么是 JaMP,我如何了解它?

java - 每 X 秒在线程中失效一次

java - Apache Isis 和 MySQL

java - 如何避免使用 JPA 注释的循环引用?

java - 获得10次方的最快方法

android - Jetpack 撰写水印或使用 androidx.compose.ui.graphics.Canvas 在位图上书写?

java - 否则没有 if - android studio/java

java - 如何使用 ThreadPoolTask​​Executor 设置任务超时