为什么 wait(), notify()和 notifyAll ()必须在同步方法或 者同步块中被调用?

Posted programb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么 wait(), notify()和 notifyAll ()必须在同步方法或 者同步块中被调用?相关的知识,希望对你有一定的参考价值。

当一个线程需要调用对象的 wait()方法的时候,这个线程必须拥有该对象的锁,接

着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的 notify()

方法。同样的,当一个线程需要调用对象的 notify()方法时,它会释放这个对象的

锁,以便其他在等待的线程就可以得到这个对象锁。由于所有的这些方法都需要

线程持有对象的锁,这样就只能通过同步来实现,所以他们只能在同步方法或者

同步块中被调用。

以上是关于为什么 wait(), notify()和 notifyAll ()必须在同步方法或 者同步块中被调用?的主要内容,如果未能解决你的问题,请参考以下文章

wait和notify

JUC并发编程 -- 为什么需要wait/notify方法 & 原理之 wait / notify & wait() 和 notify() API介绍

为什么wait()和notify()属于Object类

关于wait,notify,notifyall,sleep方法的思考

求求你,别再用wait和notify了!

从Guarded Block来看Java中的wait和notify方法