如何同步两个异步任务?

我的问题是我有两个异步任务,它们进行一种矩阵乘法。 因此,两个任务都访问相同的矩阵。 一个是上部,另一个是下部。 对于内存保存问题,我使用ArrayLists并删除不需要更长时间的条目。 问题在于,在两个任务中都存在循环运行,并且在该循环结束时它应该等待另一个任务。 但我不知道该怎么做。 任务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(); } 

我试图使用通知和等待,但似乎这不是解决问题。 我不知道可以用来解决问题的任何其他方法。 在两个任务都在运行时,实际上是否有可能等待另外两个任务?

如果这是Java-7,那么您正在寻找Phaser 。 您需要的方法是arriAndAwaitAdvance 。

在早期版本的Java(5.1或更高版本)中,您可能会使用信号量 。

或者 – 您可以切换到使用线程池,例如ExecutorService和Futures 。 这将更具可扩展性,并且可以更好地利用多核处理器。

我相信下面问题的答案可以为您提供有关如何管理多个异步任务的抽象信息。

如何在Android中有效管理多个异步任务

同时运行多个AsyncTasks – 不可能?

和github示例:

https://github.com/vitkhudenko/test_asynctask (信用:vitkhudenko)