如何安全的关闭程序

2021-02-18 16:49发布

问题:

如果写好一个多线程的并发应用,各个线程的业务逻辑很可能不一样。如果有线程在死循环内,执行了数据库事务、非事务控制的第三方数据相关程序。

如果在windows中,使用任务管理器结束或者在Linux中使用kill命令(非-9)。如何保证,这些线程正常结束呢?程序以后台模式运行。    

回答1:

如果要正常关闭,需要自己来处理这些线程的同步
windows下可以使用消息处理,linux使用信号signal来处理

大体步骤
1 程序有接收信号的处理程序,如signal 2,接收到这个后比如设置一个旗标 isExit
2 线程中判断这个旗标 isExit ,执行线程结束过程
3 主程序main等待所有的线程结束,有的情况下线程强制退出,但一般不建议

一般是这样处理,才能保证资源的正确释放和处理



回答2:

你的意思是线程突然中断,导致线程执行的DML事务在数据库中未能提交,导致数据库资源被占用而出现阻塞吗



标签: java python php c