【发布时间】:2013-06-19 21:31:50
【问题描述】:
出于好奇,当 Java 实现 wait() 和 notify() 方法时,它们真的只是使用锁吗?即,wait() 获取一个互斥锁, notify() 释放一个互斥锁, notifyAll() 释放所有互斥锁(当然是在同一个对象中)?
除了比使用锁更方便之外,使用wait()和notify()还有其他好处吗?
[编辑] 在布赖恩的 cmets 之后,我意识到自己对什么感到困惑:
wait 不加锁,它释放锁并将其传递给正在等待互斥锁同步语句的其他人,然后等待拥有锁的其他人通知并调用 notify,将锁传回到调用等待的原始线程。我认为这就是你感到困惑的地方。 – 布赖恩 17 分钟前
【问题讨论】:
-
notifyAll() 释放同一对象上的所有等待。根本不是一回事。
-
@EJP 当然,我的意思是所有等待同一个对象,类似于释放该对象在 wait() 中获取的所有互斥锁,如果它们的隐式实现相同的话。
-
等待和互斥锁怎么会是一回事?
-
您假设有有多个互斥体,这已经是不同的了。您假设存在差异,然后询问它们是否相同。不是一个真正的问题。
-
@EJP 也许我没有很好地解释我的问题。我做了一些编辑。你能再看一遍吗?
标签: java multithreading concurrency locking wait