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