1

私の問題は、一種の行列乗算を行う 2 つの非同期タスクがあることです。したがって、両方のタスクが同じマトリックスにアクセスしています。1つは上部、もう1つは下部です。メモリ節約の問題については、ArrayLists を使用し、不要になったエントリを削除します。問題は、両方のタスクに for ループの実行があり、このループの最後で他のタスクを待機する必要があることです。しかし、これを行う方法がわかりません。タスク1:

protected Void doInBackground(Void... paramArrayOfParams) {
        android.os.Debug.waitForDebugger();
        for(j=1; j<(size+1); j++)
        {
            .... 
            try{ othertask.wait();
            }catch(InterruptedException e){}
            //wait for other task();
        }

タスク 2:

protected Void doInBackground(Void... paramArrayOfParams) {
            android.os.Debug.waitForDebugger();
            for(j=1; j<(size+1); j++)
            {
                ....
                notifyAll();
                //notifythatroundisfinished();
            }

通知と待機を使用しようとしましたが、これでは問題が解決していないようです。問題を解決するために使用できる追加の方法はわかりません。両方が実行されている間に、他のタスクを 2 つ待機することは実際に可能ですか?

4

2 に答える 2

1

以下の質問への回答は、複数の非同期タスクを管理する方法に関する抽象的な情報を提供できると思います。

Android で複数の非同期タスクを効率的に管理する方法

複数の AsyncTask を同時に実行する -- 不可能ですか?

およびgithubの例:

https://github.com/vitkhudenko/test_asynctask (クレジット: vitkhudenko)

于 2013-09-20T10:07:31.050 に答える
0

これが Java-7 の場合、 Phaserを探しています。必要なメソッドはArrivalAndAwaitAdvanceです。

以前のバージョンの Java (5.1 以降) では、おそらくSemaphoreを使用していました。

または、 ExecutorServiceFuturesなどのスレッド プールの使用に切り替えることもできます。これにより、スケーラビリティが大幅に向上し、マルチコア プロセッサをより有効に活用できます。

于 2013-09-20T10:10:15.587 に答える