java线程处理问题
public class Outdb extends Thread implements SignalHandler {
........................
........................
private void signalCallback(Signal sn) {
System.out.println(sn.getName() + "is recevied.");
System.out.println("-----------------------------");
System.out.println("SINGAL:" + Thread.activeCount());
System.exit(0);
}
public void run() {
System.out.println("-----------------------------");
System.out.println("addShutdownHook run:" + Thread.activeCount());
appExit();
}
/**
* @重写信号处理函数
* @说明:当接收信号时调用调用信号处理函数
* @Date : 2010-02-01
* @param: 注册信号名称
*/
public void handle(Signal signalName) {
signalCallback(signalName);
// Chain back to previous handler, if one exists
if (oldHandler != SIG_DFL && oldHandler != SIG_IGN) {
System.out.println("another signal received , Chain back!");
oldHandler.handle(signalName);
}
}
/**
* @Main 主函数
* @Date : 2010-02-01
* @param: param 程序调用参数数组
*/
public static void main(String param[]) throws Exception {
Outdb doit = new Outdb();
Runtime.getRuntime().addShutdownHook(doit);
Signal sigTERM = new Signal("TERM");/* 注册KILL信号 */
Signal sigINT = new Signal("INT");/* 注册CTRL+C信号 */
doit.oldHandler = Signal.handle(sigTERM, doit);
doit.oldHandler = Signal.handle(sigINT, doit);
...................
}
}
程序主要用SignalHandler进行信号监听,信号处理方法signalCallback中进行执行退出;
同时Runtime.getRuntime().addShutdownHook(doit);注册了程序退出处理函数;
但是在程序执行过程中,当收到CTRL+C信号之后,虽然执行了信号处理函数和退出处理函数,但是Main主线程
没有立刻停止。
请教各位,如何控制当接收到信号之后将MAIN线程挂起?
...全文
相关推荐
Java多线程问题及处理笔记.doc
Java多线程问题及处理笔记.doc
Java线程之锁对象Lock-同步问题更完美的处理方式代码实例
主要介绍了Java线程之锁对象Lock-同步问题更完美的处理方式代码实例,还是挺不错的,这里分享给大家,需要的朋友可以参考。
计算机后端-Java-Java核心基础-第20章 多线程 07. 同步代码块处理实现Runnable的线程安全问题.avi
计算机后端-Java-Java核心基础-第20章 多线程 07. 同步代码块处理实现Runnable的线程安全问题.avi
计算机后端-Java-Java核心基础-第20章 多线程 09. 同步方法处理实现Runnable的线程安全问题.avi
计算机后端-Java-Java核心基础-第20章 多线程 09. 同步方法处理实现Runnable的线程安全
Java线程池及观察者模式解决多线程意外死亡重启问题
Java线程池及观察者模式解决多线程意外死亡重启问题,附件含两个要运行代码!


Java SE
