Как приостановить метод 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)

Как я могу это исправить?

0 ответов

Другие вопросы по тегам