NullMoneyException
2017-07-06 15:31
锁在while循环外面 如果一直循环 锁不被释放 其他线程怎么可以拿到锁呢
当while判断满足时,进入wait,将当前线程暂停并且释放资源等待后面的线程,当下个线程进入的时候,判断条件不满足时,执行notifyall,唤醒所有线程,然后如果等待中的线程获得执行资格时,当前线程将会继续执行while。不知道这样理解对不对。
声明:解释转自 sxian_wang 的回答
先明白两个概念:锁池和等待池。synchronized是锁池,wait、notify、notifyAll是等待池。等待池的对象是不会竞争锁的,当notifyAll后,等待池中的线程会被唤醒进入到该线程的锁池中重新竞争对象锁,重新获得锁后的对象会从wait后继续执行代码,其他对象会被阻塞,而不是wait。被阻塞的对象会等待下一次被唤醒(notify、notifyAll)。另外,notify不是线程安全的,notifyAll才是。
深入浅出Java多线程
186088 学习 · 464 问题
相似问题