0

我有一个 spring 应用程序,其@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)

我怎样才能解决这个问题?

4

0 回答 0