以上代码的执行结果如下:
从上述结果可以看出,线程 1(轮询锁)加入随机等待时间之后就不会出现线程饿死的问题了。
5.总结
本文介绍了死锁的概念,以及产生死锁的 4 个条件,排查死锁可以通过本文提供的 4 种工具中的任意一种来检测,从易用性和性能方面来考虑,推荐使用 jconsole 或 jvisualvm,最后我们介绍了死锁问题的两种解决方案:顺序锁和轮询锁。
---END---
原创并发文章推荐
14.SimpleDateFormat线程不安全的5种解决方案!15.synchronized 加锁 this 和 class 的区别!16.synchronized 优化手段之锁膨胀机制!17.synchronized 中的 4 个优化,你知道几个?18.ReentrantLock 中的 4 个坑!19.图解:为什么非公平锁的性能更高?