gpt4 book ai didi

Java等待没有锁释放

转载 作者:行者123 更新时间:2023-11-30 12:06:44 26 4
gpt4 key购买 nike

如何在不释放锁的情况下让线程等待?如果这不可能,那么我如何在不满足特定条件时暂停线程,并在满足条件或通知它时立即取消暂停

最佳答案

等待/通知的概念

等待/通知只能在锁的范围内完成(例如同步方法或同步块(synchronized block))。

waitnotify 应该在同一个对象上同步。

等待线程:

synchronized(lockObject) {
lockObject.wait(); <-- it will wait here until the notify is called.
}

通知线程:

synchronized(lockObject) {
lockObject.notify();
}

lockObject 可以是任何东西。它可能只是一个 new Object(),但通常它可能是某个集合、一个代表打印机的逻辑对象……任何东西。

提示:从评论部分来看,您可能需要以下内容:notify 仅释放一个等待线程。但是您实际上可能有多个线程在等待。如果要释放所有这些,请使用 notifyAll

同样的事情,但使用同步方法

或者,您可以创建一个类,并使用方法级锁定。

class LockObject {
public synchronized void waitMethod() {
wait();
}

public synchronized void notifyMethod() {
notify();
}
}

同样,两者都必须使用相同的对象来锁定。

LockObject instance = new LockObject();

然后是等待线程:

instance.waitMethod();

通知线程:

instance.notifyMethod();

如果你是认真的

同时看看 concurrency packages and tutorials of the JDK ,你会发现更高级的锁定对象。仅举一个例子,countdown latches很强大。

关于Java等待没有锁释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55354914/

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