Приостановить поток до тех пор, пока событие не будет посещено в другом потоке

StackOverflow https://stackoverflow.com/questions/121762

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть два потока в приложении Android: один — поток просмотра, а другой — рабочий поток.Я хочу приостановить рабочий поток до тех пор, пока поток представления не завершит обработку метода onDraw.

Как я могу это сделать?нужно ли ждать сигнала или чего-то еще?

Это было полезно?

Решение

Разделите объект java.lang.Object между двумя потоками, единственная цель которого — сообщить рабочему потоку, когда он сможет продолжить свою работу.Всякий раз, когда рабочий поток достигает точки, в которой он должен спать, он делает следующее:

stick.wait();

Когда поток просмотра завершает работу onDraw, он вызывает это:

stick.notify();

Обратите внимание на требование, чтобы поток просмотра владел монитором объекта.В вашем случае это должно быть довольно просто реализовать с помощью небольшого блока синхронизации:

void onDraw() {
  ...
  synchronized (stick) {
    stick.notify();
  }
} // end onDraw()

Обратитесь к javadoc для java.lang.Object по этим методам (и notifyAll, на всякий случай);они очень хорошо написаны.

Другие советы

Если вам нужен API параллелизма более высокого уровня (с такими вещами, как барьеры), вы можете попробовать резервный порт API параллелизма Java 5, который работает на Java 1.3 и выше и может работать на Android.Подобные Object.wait/notify будут работать, но они могут быть немного краткими.

Backport-util-параллельный

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top