Как узнать, выполняется ли выключение?

В Tomcat, когда сервер выключается, он пытается установить для всех статических переменных в известных ему классах значение NULL. При прикосновении к этим классам запускаются их статические инициализаторы, что может привести к бесконечному циклу для некоторых из наших устаревших классов, которые имеют массивные статические инициализаторы.

Есть ли элегантный способ определить, выполняется ли в настоящее время завершение работы? Затем мы могли бы проверить в верхней части статических инициализаторов, находимся ли мы в режиме выключения, а затем проигнорировать инициализацию.

Единственный способ, который, как мы обнаружили, работает, совсем не элегантен:

    try{
       Thread hook = new Thread();
       Runtime.getRuntime().addShutdownHook( hook ); // fires "java.lang.IllegalStateException: Shutdown in progress" if currently in shutdown
       Runtime.getRuntime().removeShutdownHook( hook );
    }catch(Throwable th){
       throw new Error("Init in shutdown thread", th );
    }
8
задан Epaga 27 April 2011 в 14:08
поделиться