线程未设置daemon导致shutdown无法及时退出
来源:互联网 发布:c语言http下载文件 编辑:程序博客网 时间:2024/06/01 10:20
某次停止tomcat后,使用jps查看进程依然存在;直接jstack查看目前后台的哪些进程还在运行,发现main线程已经没有了,说明main线程已经执行完毕,我们自己的线程依旧存在,如:CONFIG-WATCHER。
那在什么情况下,会主线程运行完了,虚拟机还没退出呢?
参考 https://stackoverflow.com/questions/7416018/when-does-the-main-thread-stop-in-java
虚拟机会在如下两种情况下退出
1.所有的非守护线程(用户线程)执行完毕退出;
2.调用了exit方法
如上链接里的例子其实不错的,最后加个exit,分别注释和不注释可以看到不同的运行效果,看到的同学可以自己试一下
public static void main(String args[]) { System.out.println("Main thread started"); new Thread(new Runnable() { @Override public void run() { System.out.println("Second thread started"); try { Thread.sleep(2000); } catch (Exception e) { } System.out.println("Second thread (almost) finished"); } }).start(); System.out.println("Main thread (almost) finished"); //System.exit(0); }
那么我们的这一次shutdown.sh之后还在java程序运行的原因就是自己的线程没设置daemon属性为true了,修改就简单的在线程start之前thread.setDaemon(true)即可。其实对于长期的定时的线程,最好设置为daemon线程。防止程序无法完全退出的现象出现。
阅读全文
0 0
- 线程未设置daemon导致shutdown无法及时退出
- shutdown未初始化的ScheduledExecutorService导致udp无法接收
- Activity中开辟了线程更新UI,线程未结束,退出了Activity,导致问题
- 未释放互斥锁线程退出
- Safari 无法退出,导致无法关机 解决,强制退出即可!!!
- mongodb意外退出无法启动解决办法(Unclean shutdown detected.)
- mongodb意外退出无法启动解决办法(Unclean shutdown detected.)
- scala使用par并行集合设置的线程池未关闭导致的内存占用问题
- 因host命令导致无法正常SHUTDOWN的实验
- Eclipse 未正常退出,导致进不去的问题
- Eclipse 未正常退出,导致进不去的问题
- SQL Server索引统计信息未及时更新,导致排序混乱
- 由于GUARANTEE RESTORE POINT未及时清理导致数据库挂起一例
- Daemon线程
- Daemon线程
- Daemon 线程
- daemon线程
- Daemon 线程
- Android实现滑动的几种方式
- Saltstack console平台界面配置
- UGUI
- Android Studio无法单点调试Connected to the target VM, address 'localhost8601', transport 'socket'
- java中高级面试
- 线程未设置daemon导致shutdown无法及时退出
- JSP中嵌入JavaBean
- gdb调试工具
- KEIL——目录
- Python
- Jquery实现京东右侧固定层
- C#中的enum枚举类
- JAVA正则表达式 Pattern和Matcher,用正则替换对应的内容。
- Jq获取值