Java-таймеры — вызываемые функции не завершаются!
-
19-09-2019 - |
Вопрос
Итак, у меня есть TimerTask task
вызов функции onTimerComplete()
в своем run()
onTimerComplete()
выглядит примерно так:
private void onTimerComplete(){
myFunc1();
myFunc2();
}
Я делаю Timer t
и я планирую TimerTask
с t.schedule(task, 2000);
Проблема в том, что когда таймер сработал и задача запускается, onTimerComplete()
но эта функция не завершается.Он работает myFunc1()
но никогда не заканчивает и не звонит myFunc2()
Однако, если я позвоню onTimerComplete()
напрямую все работает.
В чем здесь дело?
Решение
Если myFunc1()
запускается, но не завершается, то скорее всего проблема именно в этой функции.
Вы должны знать, что эта функция будет вызываться в отдельном потоке.Существует вероятность того, что между двумя потоками происходит какое-то нежелательное взаимодействие.(Описание здесь.)
Если myFunc1()
использует некоторые переменные, которые также используются в других параллельных действиях, вам может потребоваться синхронизировать части вашего кода.А руководство по параллелизму может помочь вам понять, в чем проблема и как ее исправить.