关于死锁的粗浅理解

要尽量避免死锁的出现

Java中synchronized同步的个人见解_porkczr的博客-CSDN博客

Java线程同步:synchronized锁住的是代码还是对象_叉叉哥的BLOG-CSDN博客_synchronized锁的是对象还是方法

当两个线程都有一把自己的锁时又互相调用对方的锁,此时又同时执行自己的方法 那么就可能互相锁死,就产生了死锁

以下是死锁的图解:

①首先有两个线程,它们分别有一把锁 合计两把锁

②然后它们在自己的run()主体代码中分别又上了一把锁

③最后两个线程被同时调用

④此时两个对象都会进入自己的run()方法,并且在使用第一重锁后,当它们想使用继续进入第二重锁时就产生了死锁

这里有个细节就是synchronized() 括号里面的是锁要锁住的对象,同时也是锁的名字,如例子中的“dx” “bx”

如果在不同的地方出现同一个synchronized(指的是括号里对象相同),那么它们其实就是同一把锁,如果线程都在调用这个锁,自然就会产生死锁,而原因也很简单,synchronized锁都存在一个常量池里,就类似字符串,名字相同,那么指向的就是同一把锁

当然 因为代码总有上下行 只要够快 什么死锁都不是事 执行下一行前我上一行代码全部执行完 自然不存在互锁情况

总之死锁要避免 不允许出现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值