【发布时间】:2017-07-09 20:09:08
【问题描述】:
如何在不忙于等待的情况下暂停线程直到条件变为真? 例如,假设我正在检查是否
playerOne.isWalking()
将成为真的,我想在它成为真的时运行一些代码。再次假设 playerOne 是 Player 类的一个实例,它具有函数 isWalking()。我无权访问使 isWalking() 成为真的原因。所以每次我想检查 isWalking() 是否为真时,我都必须从 player 的实例中显式调用该方法。
我已经尝试在同步块中使用等待/通知,但这永远不会起作用,因为我必须手动通知线程在 isWalking() 变为真时唤醒,我不知道它何时变为真.
我尝试使用观察者模式使 Player 成为 observable 的子类,这样我就可以在 isWalking() 变为 true 时调用 update 方法,但我不知道什么时候会发生。
我什至尝试过使用属性,但这也行不通。
这甚至可以在不忙于等待的情况下进行检查吗?不断的轮询和调用那个函数,看是否为真,如果为真,执行代码。
这是我提出的涉及忙等待的糟糕解决方案:
【问题讨论】:
-
欢迎来到 Stack Overflow!请带上tour,四处看看,通读help center,尤其是How do I ask a good question? 和What topics can I ask about here?。
标签: java multithreading synchronization listeners busy-waiting