Download ShutdownHookDemo.java source file
// Demo showing a sample use of a shutdown hook. Shutdown
// hooks replace using finializers in Java.
//
// Written 9/2006 by Wayne Pollock, Tampa Florida USA.
import java.util.*;
public class ShutdownHookDemo
{
static List<String> resourceList = new ArrayList<String>();
public static void main( String [] args ) throws Exception
{
Thread shutdownHook = new Thread() {
public void run ()
{
System.out.println( "Running shutdown hook:" );
// for each item that needs cleanup steps, do them now.
// Note in real life you probably have a list of objects,
// each with some "cleanup" code to run. Each object, in
// its constructor can register a shutdown hook. Then you
// don't need a list as used here.
for ( String name : resourceList )
System.out.println( "\tCleaning up resource " + name );
}
};
Runtime currentJRE = Runtime.getRuntime();
currentJRE.addShutdownHook( shutdownHook );
// Now do stuff, knowing any resources will be cleaned up at exit:
resourceList.add("Blossom" );
resourceList.add("Buttercup" );
resourceList.add("Bubbles" );
System.out.print( " Type 'x' to exit, 'e' to cause exception, "
+ "or 'p' to pause: " );
Scanner in = new Scanner( System.in );
String choice = in.next();
switch ( choice.charAt(0) )
{
case 'x':
case 'X': System.exit( 0 );
case 'e':
case 'E': throw new Exception( "abort" );
}
// Sleep for a few seconds to allow user to hit ctl+c:
try { Thread.sleep( 8*1000 ); } catch (InterruptedException e) {}
}
}