12

我正在尝试并行运行 4 个线程,但失败了。

我尝试过使用同步wait()notify() CyclicBarrier ThreadPoolExecutor CountDownLatch AsyncTask许多其他方法,但没有管理并行运行线程。

我们可以并行运行 4 个线程(即在 android 中同时运行)吗?如何?

注意:我正在使用AudioRecordAudioTrackAPI 处理音频流。

4

2 回答 2

17

我们可以在Android中同时运行4个线程吗?

是的,您可以并行运行 4 个线程。添加更多线程通常会有所帮助,但在某些时候,它们会导致一些性能下降。但是 4 个线程不会引起问题。

问题:我无法并行运行线程,即第 1 线程运行:4 次,第 2、第 3、第 4 次只有 1 次。如何使其并行运行(尝试使用提到的线程但未成功运行所有线程并行)?

如果您的目标只是让所有线程主动处理,我建议查看 Java线程池(以及更普遍的Executors )。

android支持多线程?如果是的话,多线程在android中是如何工作的?

是的,Android 支持多线程。最优选的实现方式(除了线程池和执行器)是AsyncTask

AsyncTask允许您实现doInBackground(),您的线程可以在其中完成任务。这类似于您从中获得的功能Thread

真正的魔法发生在您覆盖onPreExecute()and时onPostExecute()它们都在 UI 线程上执行。这应该可以防止您收到有关您的活动未附加的消息。

这个答案包含一个小代码示例AsyncTask,可以帮助您入门。

另外,看看Android中的处理程序

编辑——我在研究过程中发现,录制、发送和接收音频都是非常互动的过程,它们需要同步和 IO 资源。最好的解决方案可能是,您可以为每个操作创建单独的 AsyncTask,以便每个操作在其单独的 AsyncTask 中执行。

于 2012-12-27T11:59:08.797 回答
2
  1. 您可以运行 4 个不同的线程,但为了并行(同时)执行,您必须支持它。如果你有一个单核 cpu,执行线程的顺序取决于调度程序,一次只会执行一个线程
  2. 执行的顺序和时间由调度程序决定。
  3. 是的,它确实。您可以同时依赖 AsyncTask 或 java 特性(例如 Executors)
于 2012-12-27T12:08:25.730 回答