Сон поток до события посещен в другом потоке

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

27
задан UMESH0492 4 March 2016 в 22:32
поделиться

2 ответа

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

stick.wait();

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

stick.notify();

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

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

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

38
ответ дан Paul Brinkley 28 November 2019 в 05:26
поделиться

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

Backport-util-concurrent

2
ответ дан Prags 28 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: