不太懂这段代码的同步锁

来源:4-3 Java线程交互之互斥与同步:守恒的能量

NullMoneyException

2017-07-06 15:31

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

写回答 关注

2回答

  • 慕姐936777
    2017-09-03 22:07:06

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

  • 正方形企鹅
    2017-07-09 15:35:51

    声明:解释转自 sxian_wang 的回答

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

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题