2011-12-30 3 views

risposta

12

... e per legare le altre risposte al funzionamento degli ambienti Java Servlet;

se non si dichiarano i thread come thread daemon, il modo per segnalare l'arresto del server ai thread è implementare un ServletContextListener e configurarlo sulla propria applicazione Web (web.xml). Quando Tomcat si sta spegnendo, prima spegnerà ogni applicazione, che a sua volta causerà il metodo contextDestroyed() del listener da chiamare - ed è qui che puoi segnalare ai tuoi thread che devono finire il loro lavoro.

+0

Ad ogni modo, per scoprire i thread che causano questo problema, mi sarebbe utile, poiché sto riscontrando anche questo problema. – Azim

+0

È possibile utilizzare kill -3, jstack o tomcat spesso eseguire il dump delle tracce dello stack in catalina.out. – ticktock

6

Qualsiasi thread ancora in esecuzione manterrà in vita il processo Java (Tomcat). Assicurati che tutte le discussioni escano. Una volta terminati i thread, Tomcat sarà in grado di spegnersi.

Vedere la javadoc per Thread. Tenere presente quanto segue:

La Java Virtual Machine continua ad eseguire le discussioni fino a quando una delle seguenti situazioni:

  • Il metodo di uscita di classe Runtime è stato chiamato e il responsabile della sicurezza ha consentito l'operazione uscita prendere posto.
  • Tutti i thread che non sono thread daemon sono morti, restituendo dalla chiamata al metodo run o generando un'eccezione che si propaga oltre il metodo run.
+0

Potete suggerire qualsiasi strumento attraverso il quale possiamo avere un controllo su questi thread? – Azim

5

È necessario annullare le discussioni, preferibilmente chiamando interrupt su di loro e fare in modo che siano scritti in modo tale che essi rispondono alla interruzione - significato, controllando la loro bandiera interrotta e rispondere in maniera intelligente a InterruptedExceptions (non solo mangiandoli e continuando).

Il consiglio precedente presuppone che non si desideri che i thread interrompano immediatamente ciò che stanno facendo. Se sei d'accordo, allora faglieli demoni.

+3

Problema che utilizzo librerie di terze parti che creano i propri thread. E con questi fili è un problema. – user710818

+0

@ user710818: sì, questo è un brutto problema. Spero che le biblioteche ti forniscano un modo per dire loro di fare un arresto graduale. –

Problemi correlati