java线程处理问题

baihuihui baihuihui 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
     
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线程挂起?
...全文

相关推荐

评论 23
收藏 已收藏
分享
返回顶部
baihuihui
Java SE 62,621 成员 307,251 内容