如果条件变为真,没有繁忙的等待,你如何暂停一个线程? 例如,假设我正在检查是否
playerOne.isWalking()
是真的,我希望在它变为真时运行一些代码。再次假设playerOne是Player类的一个实例,然后它具有函数isWalking()。我无法访问是什么让isWalking()成为现实。因此,每当我想检查isWalking()是否为真时,我必须明确地从播放器实例调用该方法。
我已经尝试在同步块中使用Wait / Notify,但这不会起作用,因为当isWalking()变为true时我必须手动通知Thread唤醒我不会知道什么时候会成真。
我尝试使用观察者模式使Player成为observable的子类,以便当isWalking()变为true时我可以调用update方法但是我不知道何时会发生这种情况。
我甚至尝试过使用Propertys,但那也不行。
这是否可以在没有忙碌的情况下进行检查?不断轮询和调用该函数以查看它是否为真,如果是,则执行代码。
这是一个糟糕的解决方案,我涉及忙碌等待:
答案 0 :(得分:0)
底层问题是您使用 getter 方法获取信息并对其进行操作。这里违反的原则是告诉,不要问!。
OO解决这个问题的方法是引入一个接口(例如:PlayerMovingListener
)。
播放器类将保存实现该接口(或其列表)的对象的实例。一旦玩家开始行走,它就会调用由玩家持有的(或所有)侦听器对象实现的接口中定义的isMoving()
方法。
最有可能是由当前Payer
实施中的setter方法触发。