java线程无法正常停止总结
2017-06-21 00:00
183 查看
摘要: 针对平时开发中遇见的问题总结
在我们开发中,特别是多线程开发,很容易出现一些千奇百怪的问题。比如果说正常的程序停止不了。这时候大家第一反应是 是不是线程死锁了,则么老停不掉。特别是用Tomcat做服务器时后端多线程编程也容易出现这种问题,tomcat服务停不掉。
对于程序停不掉:
1、死锁。这个很容易借助jdk提供的工具定位到对应的代码位置,使用jps 然后jstack id。就能够看到BEBLOCK状态,并有对应的代码堆栈。
2、线程挂起。并不是死锁现象,而是线程挂起,线程状态时RUNNING状态,这中就不好定位了,因为线程状态一直时RUNNING状态,很容易就当成服务的正常状态了。针对这种问题定位,建议使用jconsole逐一排查线程。此外需要注意的是,自己使用的线程不管是线程池还是直接使用的线程,都一定要标记业务相关的线程名称,这样我们根据jconsole内监控的我们自己的线程,先去逐一排查我们自己的线程哪些应该停止哪些不应该停止,然后锁定线程名称,最后找到业务代码。在多线程编程下注意尽量不要使用JDK不推荐的一些类和方法。
3、自己开辟的线程不是后台线程,该线程一直不会停止,当主线程停止掉后,整个java进程还在。这中错误注意点应该就不会犯。
在我们开发中,特别是多线程开发,很容易出现一些千奇百怪的问题。比如果说正常的程序停止不了。这时候大家第一反应是 是不是线程死锁了,则么老停不掉。特别是用Tomcat做服务器时后端多线程编程也容易出现这种问题,tomcat服务停不掉。
对于程序停不掉:
1、死锁。这个很容易借助jdk提供的工具定位到对应的代码位置,使用jps 然后jstack id。就能够看到BEBLOCK状态,并有对应的代码堆栈。
2、线程挂起。并不是死锁现象,而是线程挂起,线程状态时RUNNING状态,这中就不好定位了,因为线程状态一直时RUNNING状态,很容易就当成服务的正常状态了。针对这种问题定位,建议使用jconsole逐一排查线程。此外需要注意的是,自己使用的线程不管是线程池还是直接使用的线程,都一定要标记业务相关的线程名称,这样我们根据jconsole内监控的我们自己的线程,先去逐一排查我们自己的线程哪些应该停止哪些不应该停止,然后锁定线程名称,最后找到业务代码。在多线程编程下注意尽量不要使用JDK不推荐的一些类和方法。
3、自己开辟的线程不是后台线程,该线程一直不会停止,当主线程停止掉后,整个java进程还在。这中错误注意点应该就不会犯。
相关文章推荐
- 关于Java中停止线程执行的方法总结
- Java——线程正常停止
- java 正常的线程停止操作思想
- java 正常的线程停止操作思想
- java 正常的线程停止操作思想
- java 正常的线程停止操作思想
- 子线程中循环操作UI线程时导致子线程无法正常结束的问题总结
- java线程安全总结
- [改善Java代码]不使用stop方法停止线程
- 停止Java线程,弃用stop()方法, 也要小心interrupt()方法
- java中如何停止(stop)一个线程
- java中一个子线程如何通过interrupt手段来停止另外一个子线程
- Java【多线程知识总结(2)】调用setDaemon(true)变成后台线程
- 转:Java线程总结
- Java线程总结(一)
- Java停止线程及有锁时停止方法
- java中线程学习总结
- java中让线程停止的技巧
- (转)Java线程:大总结
- Hadoop运维笔记 之 Namenode异常停止后无法正常启动