Да, учитывая то, что вы выложили выше, я бы пошел с:
private synchronized void outerMethod() {
...
}
Обратите внимание, это будет иметь побочный эффект блокировки одного из вызывающих, пока не завершится externalMethod (). Если это приемлемо, круто. Если намерение состоит только в том, что код в outerMethod () запускается один раз, и , то нормально, чтобы второй вызывающий не задерживался, если первый вызывающий выполняет externalMethod (), вы могли бы рассмотреть:
public OuterClass {
private AtomicBoolean outerMethodHasBeenCalled = new AtomicBoolean();
private void outerMethod() {
if (outerMethodHasBeenCalled.compareAndSet(false, true)) {
// do stuff
}
}
...
См. JavaDoc для AtomicBoolean , чтобы узнать, что там происходит (при условии, что оно доступно в Java на Android).