'Synchronized' 在内部对象上,例如。游戏循环.player1

'Synchronized' on inner object, for ex. gameloop.player1

我知道监视器如何工作、锁定对象、死锁等,但这对我来说还不清楚,我必须确保我做的是正确的。

假设我有一个对象gameloop。 在那个对象里面我们有玩家:player1player2

我的 gameloop 呈现、读取用户的输入并修改 synchronized 块中的 player1player2

我还有第二个 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