Java面试问题之四十六

请问在Java中notify()和notifyAll方法有什么区别?

答:Java中notify()和notifyAll()方法的主要区别在于:notifyAll()方法会使原来在某个对象等待池中的线程全部退出wait状态,进入该对象的锁池中,一旦该对象的锁被释放,它们会竞争获取对象的锁。相比之下,notify()方法只会随机选择一个处于wait状态的线程进行唤醒,使这个线程进入该对象的锁池中,当对象的锁被释放后并且该线程获得了CPU运行时间后即被执行,其他线程则保持原来的状态(还处于该对象的等待池中)。

注意:如果一个线程运行完毕后释放对象上的锁,并且没有使用notify()语句,即使该对象已经空闲了,在该对象等待池中的线程由于没有得到通知而保持原来wait状态。处于等待池中的线程等待的是被notify或者notifyAll,还没有到竞争对象锁的阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值