多线程一

线程启动

线程生命周期

阻塞状态分为Blocked,time-waiting.外在表现区别不大,产生的原因不同,可以通过jstack查看,更具体的状态有助于我们排查线程相关问题。

下面这个时更为详细的生命周期图

线程停止

  • stop方法:不建议使用,类似于kill -9,不够优雅
  • interrupt():通过Thread.currentThread().isInterrupted() 来判断,类似于外部提供一个信号thread.interrupt(); //该方法是一个native方法
  • 线程复位:当线程捕获InterruptedException时,会自动复位。如果需要继续中断,需要手动在Catch部分重新中断。因为抛中断一场多是堵塞线程时发现,捕获异常同时有唤醒功能。是否继续中断的选择权在于开发者。

排查问题

  • CPU占用率很高
    top -c 查看pid
    top -H -p [pid]
    print "0x%x\n" [新pid]
    jstack [pid] | grep -A 20 [上一步16进制结果:占用CPU多的线程]
  • CPU占用率不高,但是响应很慢(死锁)
    jstack [进程] -可以看到类似 Found one Java-level deadlock 并且会有线程详细信息
欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

posted @ 2024-07-05 23:26  灵台悠步  阅读(4)  评论(0编辑  收藏  举报