请关注我的微信公众号
![](https://img.haomeiwen.com/i752311/0262bae944cdacc7.jpg)
个人微信公众号
技术交流群 (仅作技术交流):642646237
![](https://img.haomeiwen.com/i752311/8c3ec61411e9d39d.jpg)
请关注我的头条号:
![](https://img.haomeiwen.com/i752311/807e8ec13b68ff93.jpg)
内置锁方便但限制多
1.线程因为等待内置锁而进入阻塞之后,就无法中断该线程了;
2.尝试获取内置锁时,无法设置超时;
3.获得内置锁,必须使用synchronized
块。
![](https://img.haomeiwen.com/i752311/6e2225ab5f1a71d8.png)
这种用法的限制是获取锁和释放锁的代码必须严格嵌在同一个方法中。
内置锁无法中断
使用内置锁时,由于阻塞的线程无法被中断,程序不可能从死锁中恢复。
![](https://img.haomeiwen.com/i752311/d158f6123d99d451.png)
![](https://img.haomeiwen.com/i752311/d0b3b5fc7fc2aa06.png)
![](https://img.haomeiwen.com/i752311/ead26b2119aad65c.png)
程序将永远死锁下去——跳出死锁唯一的方法是终止JVM的运行。
终止死锁的线程的办法
没有。
所有这类方法都被证明有缺陷而不推荐使用。
线程等待内置锁而陷入死锁,且不能中断其等待锁的状态,那么要终止死锁线程就只剩下终止JVM运行这条路了。
synchronized
函数是“语法糖”
![](https://img.haomeiwen.com/i752311/012a26b1744fee0f.png)
等价于将函数体按以下形式进行包装:
![](https://img.haomeiwen.com/i752311/849cf46a0fffa220.png)
网友评论