2010-06-04 12 views

risposta

26

È possibile aggiungere un shutdown hook per eseguire qualsiasi operazione di pulizia.

Ti piace questa:

public class myjava{ 
    public static void main(String[] args){ 
     Runtime.getRuntime().addShutdownHook(new Thread() { 
     @Override 
      public void run() { 
       System.out.println("Inside Add Shutdown Hook"); 
      } 
     }); 

     System.out.println("Shut Down Hook Attached."); 

     System.out.println(5/0);  //Operating system sends SIGFPE to the JVM 
            //the JVM catches it and constructs a 
            //ArithmeticException class, and since you 
            //don't catch this with a try/catch, dumps 
            //it to screen and terminates. The shutdown 
            //hook is triggered, doing final cleanup. 
    } 
} 

quindi eseguirlo:

[email protected]:~$ javac myjava.java 
[email protected]:~$ java myjava 
Shut Down Hook Attached. 
Exception in thread "main" java.lang.ArithmeticException:/by zero 
     at myjava.main(myjava.java:11) 
Inside Add Shutdown Hook 
+3

Il post di blog è 404 – luckydonald

4

Un altro modo per gestire segnali in Java è tramite il pacchetto sun.misc.Signal. Fare riferimento a http://www.ibm.com/developerworks/java/library/i-signalhandling/ per capire come usarlo.

NOTA: La funzionalità nel pacchetto sole. * Significherebbe anche che potrebbe non essere portabile/comportarsi allo stesso modo su tutti i sistemi operativi. Ma potresti volerlo provare.

+0

Ma in effetti, fa lo stesso? –

+1

No, non esattamente. L'API di gestione dei segnali che ho menzionato può essere utilizzata per gestire la maggior parte dei segnali del sistema operativo nativo (trap, intr, kill, ecc.) All'interno delle app Java. D'altra parte ShutdownHook viene richiamato solo quando JVM sta finalmente terminando (dopo che è stato ricevuto un segnale di kill). – arcamax

+0

@arcamax il collegamento sembra essere rotto – GreenGiant

Problemi correlati