java两个锁的嵌套,不是死锁
答案:2 悬赏:40 手机版
解决时间 2021-03-25 23:48
- 提问者网友:鐵馬踏冰河
- 2021-03-25 15:24
java两个锁的嵌套,不是死锁
最佳答案
- 五星知识达人网友:逃夭
- 2021-03-25 16:49
每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:
1、如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者。
2、如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1.
3.如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有权。
第一个线程是monitor的持有者,所以根据以上第二点只是重新进入,不会阻塞
1、如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者。
2、如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1.
3.如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有权。
第一个线程是monitor的持有者,所以根据以上第二点只是重新进入,不会阻塞
全部回答
- 1楼网友:神也偏爱
- 2021-03-25 17:21
方法加synchronized锁的意思是在一个线程还没跑完时,另一个线程不能调用该方法,必须等待。
你这个可以理解为一个方法加锁,另一个加锁的方法在这个方法内。更形象地说就是你进到一个房子后把大门锁了,你再进入厕所把厕所门锁了。不过实际上跟这个比喻有点不一样的是,内部的方法可能是对外开放的,不需要通过外部方法也能访问到内部方法。
你这个可以理解为一个方法加锁,另一个加锁的方法在这个方法内。更形象地说就是你进到一个房子后把大门锁了,你再进入厕所把厕所门锁了。不过实际上跟这个比喻有点不一样的是,内部的方法可能是对外开放的,不需要通过外部方法也能访问到内部方法。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯