Обучение Java. Сервлеты

       

Обеспечение "чистого" завершения


Чтобы обеспечить "чистое" завершение, уничтожение не должно разрушать ни какие разделяемые ресурсы до тех пор, пока не завершатся все сервис-процессы. Один момент реализации этого, проверка счетчика выполняемых сервисов. Другой - заключается в оповещении "долгоиграющего" методов, что пора завершать работу. Это выполняет другая часть кода приведенная ниже. Например:

public ShutdownExample extends HttpServlet { private boolean shuttingDown; ... //Методы доступа к процессам завершения

protected void setShuttingDown(boolean flag) { shuttingDown = flag; } protected boolean isShuttingDown() { return shuttingDown; } }

Ниже приведен пример метода destroy использующего вышеуказанные методы для обеспечения "чистого" завершения:

public void destroy() {

synchronized(lock) { /* Проверка на наличие ваполняемых сервисов, * и если таковые существуют, останавливаем их. */

if (numServices() > 0) { setShuttingDown(true); }

/* Ждем завершения всех сервисов. */

while(numServices() > 0) { try { wait(); } catch (InterruptedException e) { } } } }



Содержание раздела