为了账号安全,请及时绑定邮箱和手机立即绑定

不太懂这段代码的同步锁

锁在while循环外面 如果一直循环 锁不被释放 其他线程怎么可以拿到锁呢

正在回答

2 回答

当while判断满足时,进入wait,将当前线程暂停并且释放资源等待后面的线程,当下个线程进入的时候,判断条件不满足时,执行notifyall,唤醒所有线程,然后如果等待中的线程获得执行资格时,当前线程将会继续执行while。不知道这样理解对不对。

0 回复 有任何疑惑可以回复我~

声明:解释转自 sxian_wang 的回答

先明白两个概念:锁池和等待池。synchronized是锁池,wait、notify、notifyAll是等待池。等待池的对象是不会竞争锁的,当notifyAll后,等待池中的线程会被唤醒进入到该线程的锁池中重新竞争对象锁,重新获得锁后的对象会从wait后继续执行代码,其他对象会被阻塞,而不是wait。被阻塞的对象会等待下一次被唤醒(notify、notifyAll)。另外,notify不是线程安全的,notifyAll才是。

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

不太懂这段代码的同步锁

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信