美文网首页
多线程一

多线程一

作者: 东方欲晓_莫道君行早 | 来源:发表于2024-07-05 08:52 被阅读0次

    线程启动原理

    image.png

    线程生命周期

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


    线程生命周期.png

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


    image.png

    线程停止

    • 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 并且会有线程详细信息

    相关文章

      网友评论

          本文标题:多线程一

          本文链接:https://www.haomeiwen.com/subject/mvkwcjtx.html