Отключение потока до тех пор, пока событие не будет посещено в другом потоке

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
30
0
14 279
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Совместное использование 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-утилит-параллельный

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