'Synchronized' 在内部对象上,例如。游戏循环.player1
'Synchronized' on inner object, for ex. gameloop.player1
我知道监视器如何工作、锁定对象、死锁等,但这对我来说还不清楚,我必须确保我做的是正确的。
假设我有一个对象gameloop
。
在那个对象里面我们有玩家:player1
和 player2
我的 gameloop
呈现、读取用户的输入并修改 synchronized
块中的 player1
和 player2
。
我还有第二个 Thread
,用于侦听网络上的数据包。
当玩家的位置数据包到来时,它必须将其写入玩家。
我的问题来了:
synchronized(gameloop.player2){
gameloop.player2.setX(packet.receivedX);
gameloop.player2.setY(packet.receivedY);
}
以上是仅在 player2
对象上阻止 'synchronize',还是锁定整个游戏循环(在这种情况下会很糟糕)?
我不知道如何测试它,也找不到与 'synchronizing on inner objects'.
相关的任何内容
谢谢!
这将锁定 gameloop.player2,这意味着任何其他试图锁定 gameloop.player2 的同步块都必须等到您发布的代码完成。每当您需要更新 player2
时,您都希望锁定 player2
我知道监视器如何工作、锁定对象、死锁等,但这对我来说还不清楚,我必须确保我做的是正确的。
假设我有一个对象gameloop
。
在那个对象里面我们有玩家:player1
和 player2
我的 gameloop
呈现、读取用户的输入并修改 synchronized
块中的 player1
和 player2
。
我还有第二个 Thread
,用于侦听网络上的数据包。
当玩家的位置数据包到来时,它必须将其写入玩家。
我的问题来了:
synchronized(gameloop.player2){
gameloop.player2.setX(packet.receivedX);
gameloop.player2.setY(packet.receivedY);
}
以上是仅在 player2
对象上阻止 'synchronize',还是锁定整个游戏循环(在这种情况下会很糟糕)?
我不知道如何测试它,也找不到与 'synchronizing on inner objects'.
谢谢!
这将锁定 gameloop.player2,这意味着任何其他试图锁定 gameloop.player2 的同步块都必须等到您发布的代码完成。每当您需要更新 player2
时,您都希望锁定 player2