Надеюсь, этого будет достаточно информации, так что вот оно. Если вам нужна дополнительная информация, 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
первым - не имеет значения.
Итак, целесообразно ли использовать в этом случае синхронизированное ключевое слово?