【代码积累】JVM shutdown hook

import org.omg.SendingContext.RunTime;


public class Main extends Thread{
	private volatile boolean isExit = false;
	private volatile static boolean isRefresh = false;
	private static Main mainserver= null;
	public static final Object mainLock = new Object();
	
	public static Main getInstance() {
		if( null == mainserver ) {
			synchronized(Main.class) {
				if( null == mainserver ) {
					mainserver = new Main();
				}
			}
		}
		
		return mainserver;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main servermain = Main.getInstance();
		
		while(!servermain.isExit) {
			synchronized(mainLock) {
				System.out.println("Starting server main!!!");
				Runtime.getRuntime().addShutdownHook(servermain); /*hook can be registered only once.*/
				
				try {
					//System.exit(0);  /*Run this to exit JVM in order to call the hook*/
					mainLock.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				/*refresh,set isExit false*/
				if(isRefresh) {
					isRefresh = false;
					servermain.isExit = false;
					System.out.println("Restarting main server!");
				}
				
				System.out.println("Terminate the main server.After while circle.");
			}
		}
	}

	public void run() {
		System.out.println("Terminate the main server.");
	}
}

你可能感兴趣的:(【代码积累】JVM shutdown hook)