package me.test.first.cache;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main extends Thread {
private static Logger logger = LoggerFactory.getLogger(Main.class);
static class T extends Thread {
private boolean stop = false;
@Override
public void run() {
logger.info("Running... Press enter to stop.");
while (!stop) {
// 控制台如果有输入的话,也停止
try {
if (System.in != null && System.in.available() != 0) {
logger.info("Stoping because user press enter.");
break;
}
} catch (IOException e) {
// do nothing
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// 被强行终止
logger.warn("Stoping because InterruptedException.");
break;
}
}
}
/**
* 通知该线程自行停止。
*/
public void notifyStop() {
stop = true;
}
}
public static void main(String[] args) {
logger.info("Starting...");
final ClassPathXmlApplicationContext appCtx = new ClassPathXmlApplicationContext("db-context.xml");
appCtx.registerShutdownHook();
final T t = new T();
t.start();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
logger.info("notify stop");
t.notifyStop();
}
});
try {
t.join();
} catch (InterruptedException e) {
}
if (appCtx.isRunning()) {
appCtx.close();
}
logger.info("Stopped...");
}
}