12

4つのスレッドを並行して実行しようとしていますが、失敗します。

同期wait()notify() CyclicBarrier ThreadPoolExecutor CountDownLatch AsyncTask他の多くのスレッドを使用してみましたが、スレッドを並行して実行することはできませんでした。

4つのスレッドを並行して(つまり、Androidで同時に)実行できますか?どのように?

注:APIを使用AudioRecordしてオーディオストリーミングを使用しています。AudioTrack

4

2 に答える 2

17

4スレッドを並列に実行できますか?つまり、Androidで同時に実行できますか?

はい、4つのスレッドを並行して実行できます。通常、スレッドを追加すると役立ちますが、ある時点で、パフォーマンスが低下します。ただし、4つのスレッドでは問題は発生しません。

問題:スレッドを並列に実行できません。つまり、1番目のスレッドは4回実行され、2番目の3番目と4番目は1回だけ実行されます。それを並列に実行する方法(前述のスレッドを使用して試しましたが、すべてのスレッドを並列に実行できませんでした)?

単にすべてのスレッドをアクティブに処理することが目標である場合は、Javaスレッドプール(およびより一般的にはエグゼキューター)を調べることをお勧めします。

androidはマルチスレッドをサポートしていますか?はいの場合、Androidでマルチスレッドはどのように機能しますか?

はい、Androidはマルチスレッドをサポートしています。(スレッドプールとエグゼキューター以外の)それを実装する最も好ましい方法はAsyncTaskです

AsyncTaskdoInBackground()を使用すると、スレッドをそのタスクでクランクアウトできる実装が可能になります。これは、から取得する機能に似ていますThread

本当の魔法は、両方ともUIスレッドで実行されるonPreExecute()onPostExecute()をオーバーライドするときに発生します。これにより、アクティビティが添付されていないというメッセージが表示されなくなります。

この回答には、始めるための小さなコード例が含まれていAsyncTaskます。

また、Androidのハンドラーもご覧ください

編集-調査中に見つけたのは、オーディオの録音、送信、受信はすべて非常にインタラクティブなプロセスであり、同期とIOリソースが必要であるということです。そのための最善の解決策は、操作ごとに個別のAsyncTaskを作成して、各操作が個別のAsyncTaskで実行されるようにすることです。

于 2012-12-27T11:59:08.797 に答える
2
  1. 4つの異なるスレッドを実行できますが、並行して(同時に)実行するには、archがそれをサポートしている必要があります。シングルコアCPUを使用している場合、スレッドが実行される順序はスケジューラー次第であり、一度に1つのスレッドのみが実行されます。
  2. 実行の順序とタイミングはスケジューラー次第です。
  3. はい、そうです。AsyncTaskまたはJava機能(エグゼキュータなど)の両方に依存できます
于 2012-12-27T12:08:25.730 に答える