Как приостановить метод Spring @PreDestroy до тех пор, пока не будет запущен обратный вызов для возобновления завершения работы
У меня есть весеннее приложение с
@PreDestroy
метод, который должен закрыть определенный дескриптор API перед закрытием приложения, метод, который закрывает дескриптор, является асинхронным, а обратный вызов запускается API, когда дескриптор правильно закрыт.
мне нужно позвонить в
closeHandle(handle)
метод, затем остановите программу и дождитесь срабатывания обратного вызова, а затем возобновите последовательность завершения работы.
Вот что я пробовал до сих пор:
@PreDestroy
public void onDestroy() {
if (handle != null) {
try {
LogUtils.debug(getClass(), "Initializing shutdown sequence.");
closeHandle(handle);
Registry.appThread = Thread.currentThread();
Thread.currentThread().wait();
LogUtils.debug(getClass(), "Closing");
} catch (Exception e) {
LogUtils.error(getClass(), "Exception: ", e);
Thread.currentThread().interrupt();
}
}
}
Это обратный вызов:
@Override public void callback(Handle handle) {
if (Registry.appThread != null) {
Registry.appThread.notifyAll();
}
}
Но это исключение немедленно возникает, когда я вызываю метод wait():
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
Как я могу это исправить?