Надеюсь, этого будет достаточно информации, так что вот оно. Если вам нужна дополнительная информация, lemme знает в комментариях.
У меня есть класс, который имеет два внутренних класса. У внутренних классов есть два метода, которые вызывают метод во внешнем классе. Итак, это выглядит так:
public OuterClass {
private boolean outerMethodHasBeenCalled = false;
private void outerMethod() {
if(!outerMethodHasBeenCalled) {
// do stuff
}
outerMethodHasBeenCalled = true;
}
private FirstInnerClass {
public void someMethod() {
outerMethod();
}
}
private SecondInnerClass {
public void someOtherMethod() {
outerMethod();
}
}
}
Важно отметить, что:
- Это приложение для Android. Экземпляры
FirstInnerClassиSecondInnerClassпередаются в WebView как интерфейс JavaScript, поэтомуsomeMethodиsomeOtherMethodмогут быть вызваны в любой момент, в определенном порядке. - В настоящее время у меня проблема с существующим кодом (без ключевого слова synchronized), где
outerMethodвызывается в одно и то же время (я распечатываю сообщение журнала, и они привязаны к 1000-й секунде ) разными объектами. Мое приложение затем "делает вещи" дважды, потому чтоouterMethodHasBeenCalledостается ложным при вызовеouterMethod. Это не нормально, и это именно то, что я пытаюсь предотвратить. Мое приложение должно только "делать вещи" один раз и только один раз: первый разouterMethodвызывается. - Может показаться, что у меня есть несколько экземпляров
OuterClass, но будьте уверены, что это только один экземплярOuterClass.
Важно, чтобы мое приложение "делало вещи" только в первый раз outerMethod получило название (я надеюсь, что это очевидно сейчас). Все последующие вызовы по существу игнорируются. Какой бы внутренний класс не называл outerMethod первым - не имеет значения.
Итак, целесообразно ли использовать в этом случае синхронизированное ключевое слово?