我知道监视器的工作方式,锁定对象,死锁等,但这对我来说还不清楚,我必须确定自己做得正确。
假设我有一个对象gameloop
。
在该对象内,我们需要玩家:player1
和player2
我的gameloop
渲染,读取用户的输入并修改player1
块中的player2
和synchronized
。
我还有第二个Thread
,它通过网络监听数据包。
当玩家的位置数据包到来时,它必须将其写入玩家。
这是我的问题:
synchronized(gameloop.player2){
gameloop.player2.setX(packet.receivedX);
gameloop.player2.setY(packet.receivedY);
}
上面是否仅在
player2
对象上阻止了“同步”,还是锁定了整个游戏循环(在这种情况下会很糟糕)?我不知道如何测试它,也找不到与“内部对象同步”有关的任何东西。
谢谢!
最佳答案
这将锁定gameloop.player2,这意味着任何其他尝试锁定gameloop.player2的同步块也必须等到您发布的代码完成。每当需要更新player2时,您都想锁定player2