0

Моя проблема в том, что у меня есть две задачи асинхронного программирования, которые делают своего рода матричные умножения. Поэтому обе задачи обращаются к одной и той же матрице. Одна верхняя часть, другая - нижняя. Для проблем с сохранением памяти я использую ArrayLists и удаляю записи, которые мне больше не нужны. Проблема в том, что в обеих задачах есть цикл, и в конце этого цикла он должен ждать другую задачу. Но я не знаю, как это сделать. Задача 1:Как синхронизировать две задачи async?

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(); 
      } 

Я пытался использовать уведомление и ждать, но мне кажется, что это не решение вопроса. Я не знаю никаких дополнительных методов, которые я мог бы использовать для решения проблемы. Действительно ли возможно подождать два для другой задачи, пока оба работают?

ответ

0

Если это Java-7 вы ищете Phaser. Необходимый метод: arriveAndAwaitAdvance.

В более ранних версиях Java (5.1 или новее) вы, вероятно, использовали бы Semaphore.

Альтернативно - вы можете переключиться на использование пула потоков, например ExecutorService и Futures. Это будет гораздо более масштабируемым и лучше использовать многоядерный процессор.

+1

Я ищу решения для решения задач asroid для Android. –

+0

Тогда, возможно, я был прав, предлагая [Семафор] (http://developer.android.com/reference/java/util/concurrent/Semaphore.html). – OldCurmudgeon

+0

Почему этот ответ был отмечен как правильный? Я испытываю проблемы с внутренним петлителем Android. Поток asyc заблокирован, если я вызываю wait() в одном потоке. –

1

Я верю, что ответ на приведенные ниже вопросы предоставит вам информацию о том, как управлять несколькими задачами Async.

How to manage multiple Async Tasks efficiently in Android

Running multiple AsyncTasks at the same time -- not possible?

и GitHub пример:

https://github.com/vitkhudenko/test_asynctask (кредиты: vitkhudenko)

+0

Я уже просматривал эти ссылки, и раньше я не нашел ответа, поэтому я опубликовал этот вопрос. Мне нужна синхронизация, которая ждет в конце каждого цикла цикла, пока другая задача не будет в том же положении, а затем оба начнут со следующего запуска цикла for. –

Смежные вопросы