Java学习(30) -- 并发编程(线程安全)

一、死锁

死锁概念及产生原理
    概念:多个并发进程因争夺系统资源而产生相互等待的现象。
    原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。
    本质原因
        1)、系统资源有限。
        2)、进程推进顺序不合理。

死锁产生的4个必要条件
    1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。
    2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。
    3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。
    4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。
       当以上四个条件均满足,必然会造成死锁,发生死锁的进程无法进行下去,它们所持有的资源也无法释放。这样会导致CPU的吞吐量下降。所以死锁情况是会浪费系统资源和影响计算机的使用性能的。那么,解决死锁问题就是相当有必要的了。
 

二、死锁排查

利用jstack定位死锁

(1)、 在cmd窗口,使用jps指令查询该类的端口号(3408) 

è¿éåå¾çæè¿°
(2)、再使用 jstack + 端口号查看日志(jstack 3408): 

è¿éåå¾çæè¿°
发现出现死锁,并且该日志也定位了出现死锁的位置,接下来就是进行修复工作了!

TIP:在实际应用中,死锁情况未必有如此清晰的输出,但是总体上的分析步骤为: 
区分线程状态 -> 查看等待目标 -> 对比 Monitor 等持有状态

 

三、线程安全和内存模型的关系

 请参考:https://blog.csdn.net/mikeoperfect/article/details/79133899

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值