Если вам нужна только связь между потоками, а не взаимное исключение , используйте переменную volatile
:
private static volatile boolean mRunning = false;
Если только один уникальный потокизменяет переменную, и другие потоки только читают эту переменную, тогда вам не требуется дополнительная синхронизация, volatile
будет достаточно (это гарантирует, что любой поток, который читает поле, увидит последнее записанное значение).
Должен ли я просто сделать это?
public void stop() {
synchronized (this) {
mRunning = false;
}
}
Вы можете, но не должны!В любом случае, вы получите неожиданное поведение (этот ответ объясняет почему).
В ситуации, описанной в вопросе, просто используйте переменную volatile
, которая также менее многословна и чья производительностьвероятно, будет лучше по сравнению с synchronized
блоком.