因此,我有一个具有主机和客户端的Android Bluetooth应用程序。问题是,因为我要建立多个连接,所以需要一个线程来处理每个连接。那就是所有的milk'n'cookies,所以我想我会将所有线程都粘在一个数组中。一项小研究表明,执行此操作的更好方法是使用线程池,但我似乎无法理解其工作原理。另外,实际上甚至可以将线程保存在数组中吗?
最佳答案
建立线程池的想法是,由于一次又一次地创建线程非常耗时,因此我们应尝试尽可能多地回收它们。因此,线程池是执行作业的线程的集合,但是在完成作业时不会被销毁,而是“返回到池”并执行另一项作业,或者在无事可做时处于空闲状态。
通常,底层实现是一个线程安全队列,程序员在其中放置作业,并且由该实现管理的一堆线程不断轮询(不意味着一定要忙于纺纱)工作队列。
在Java中,线程池由ExecutorService
类表示,该类可以是:
固定-创建具有固定线程数的线程池
缓存-根据需要动态创建和销毁线程
单-具有单线程的池
请注意,由于线程池线程以上述方式运行(即,被回收),因此在固定线程池的情况下,建议不要使用阻止I / O操作的作业,因为执行这些作业的线程将被阻塞。有效地从池中删除,直到他们完成工作,因此您可能会陷入僵局。
至于线程数组,就像创建任何对象数组一样简单:
Thread[] threads = new Thread[10]; // array of 10 threads