博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的说一说java线程中的死锁和嵌套管程锁死问题?
阅读量:6839 次
发布时间:2019-06-26

本文共 574 字,大约阅读时间需要 1 分钟。

  hot3.png

    死锁指的是两个线程都在等待另一个线程释放锁,比如:线程T1获取了锁L1然后在等待获取锁L2,线程T2获取了锁L2然后在等待获取锁L1,这样就产生了死锁。嵌套管程锁死指的是一个线程获取锁后在另一个锁上调用了wait进入等待另一个线程发送唤醒信号,比如L:线程T1获取了锁L1然后在锁L2上调用了wait方法,线程T2需要同时获取锁L1和L2才能向T1发送信号,这样就产生了嵌套管程锁死。

 

参考资料:

嵌套管程锁死 VS 死锁

嵌套管程锁死与死锁很像:都是线程最后被一直阻塞着互相等待。

但是两者又不完全相同。在中我们已经对死锁有了个大概的解释,死锁通常是因为两个线程获取锁的顺序不一致造成的,线程1锁住A,等待获取B,线程2已经获取了B,再等待获取A。如中所说的,死锁可以通过总是以相同的顺序获取锁来避免。

但是发生嵌套管程锁死时锁获取的顺序是一致的。线程1获得A和B,然后释放B,等待线程2的信号。线程2需要同时获得A和B,才能向线程1发送信号。所以,一个线程在等待唤醒,另一个线程在等待想要的锁被释放。

不同点归纳如下:

死锁中,二个线程都在等待对方释放锁。嵌套管程锁死中,线程1持有锁A,同时等待从线程2发来的信号,线程2需要锁A来发信号给线程1。

转载于:https://my.oschina.net/u/914290/blog/802812

你可能感兴趣的文章
Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群
查看>>
Spring高级应用之注入嵌套Bean
查看>>
mini6410 uboot1.1.6 MMC fat command support
查看>>
系统日志的实践应用
查看>>
基于SmartGwt的分页组件
查看>>
【oraInventory】由OUI-10035和OUI-10033错误引发的关于oraInventory目录位置的思考
查看>>
epoll和select的区别
查看>>
地产浅吟
查看>>
Eclipse实现文件在资源管理器打开并选中
查看>>
我的友情链接
查看>>
网站访问用时统计
查看>>
django 查看请求的IP
查看>>
IOS开发基础内容
查看>>
小技巧--sendmail脚本
查看>>
node搭建服务器(一)
查看>>
何时需要权衡可见性
查看>>
Cocos2d-x 3.x游戏开发之旅
查看>>
JavaWeb技术之--面向对象设计模式
查看>>
EKL PHP 调取_search接口查询 添加购物车统计
查看>>
linux 查看IO情况
查看>>