gpt4 book ai didi

java - 条件与对象等待/通知

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:17 25 4
gpt4 key购买 nike

我正在阅读有关 Condition 对象的内容,以及它们如何为每个对象提供多个等待集,以及如何区分哪个对象或一组对象/线程获得特定信号。
为什么常规 Object 不这样做?例如。

代替:

final Condition notFull  = lock.newCondition();   
final Condition notEmpty = lock.newCondition();

lock.lock();
try {
while (count == items.length)
notFull.await();
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
notEmpty.signal();

我们这样做:

final Object notFull  = new Object();     
final Object notEmpty = new Object();

lock.lock();
try {
while (count == items.length)
notFull.wait();
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
notEmpty.notify();

我们不是还有多个等待集并区分通知线程吗?

最佳答案

在您的示例中,您在一把锁上创建了 2 个条件。这是内置同步无法做到的——您必须使用 2 个对象来获得 2 个条件。

并且您的第二个代码已损坏,因为您没有锁定 notFull 和 notEmpty 而是调用 wait/notify - 您将获得 IllegalMonitorStateException。但是如果你试图同时锁定它们,你会发现你不能同时这样做。这就是区别

关于java - 条件与对象等待/通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com