Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

stick.wait();

Когда поток представления заканчивает работу onDraw, он вызывает это:

stick.notify();

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

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

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

Ответ 2

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

http://backport-jsr166.sourceforge.net/