2012-12-27 113 views
9

我想并行运行4个线程,但失败。Android中的多线程如何工作?

我一直在使用同步wait()notify()CyclicBarrierThreadPoolExecutorCountDownLatchAsyncTask和其他许多人尝试过,但没有管理并行运行的线程。

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

注意:我正在使用音频流使用AudioRecordAudioTrack API。

+0

您可以详细说明问题所在吗? – Henry

+0

@Henry我无法一次运行全部4个线程。如何实现这一目标? –

回答

13

我们能否在机器人同时运行4线程并行即??

是的,你可以并行运行4线程。添加更多的线程通常会有所帮助,但是在某些点之后,它们会导致性能下降。但4个线程不会导致问题。

问题:我无法并行运行线程,即第一个线程运行: 4次,第2次第3次,仅第4次1次。如何使它运行(尝试使用 提到的线程,但不能并行运行所有线程)并行?

如果你的目标是简单地让所有的线程主动地处理,我建议在看的Java thread pools(和Executors更普遍)。

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

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

AsyncTasc允许您实现doInBackground(),你的线程可以在其任务杀青了。这与您从Thread获得的功能类似。

当你重写onPreExecute()onPostExecute()这是在UI线程两个执行真正的奇迹发生。这应该使您无法获得关于您的活动未附加的消息。

answer包含AsyncTask,可以让你开始一个小的代码示例。

而且,看看Handlers Android中

编辑 -我发现在我研究的是,记录,发送和接收音频都是相当互动preocesses,他们需要同步和IO资源。最好的解决方案可能是,您可以为每个操作创建单独的异步任务,以便每个操作都在其单独的异步任务中执行。

+0

谢谢..但是当我尝试AsyncTask时,我失去了很多音频数据。即,我正在使用AsyncTask将音频语音数据发送到服务器,它将自己的时间发送给服务器。那时候我会放松应用端的语音数据。 –

+0

虽然我还没有遇到任何Async任务的问题,但是如果你想使用并发线程,你可以看看线程池和执行程序。 –

+0

我也试过。我每40ms记录音频数据16Kb。它花费时间来并行运行另一个线程。 –

-4

您可以使用异步任务并行运行它们。

+0

我已经试过这个..但它需要它自己的时间来执行。 N不帮我这..我会失去许多音频数据与AsyncTask –

+4

@Taruni这应该是评论请! – swiftBoy

2
  1. 你可以运行4个不同的线程,但为了平行执行(同时)你必须支持它。如果你有一个单核cpu,执行线程的顺序取决于调度程序,并且只执行一个线程。
  2. 执行的顺序和时间取决于调度程序。
  3. 是的,它的确如此。您可以同时使用AsyncTask或java功能(例如执行程序)