gpt4 book ai didi

java - 同步块(synchronized block) - 锁定多个对象

转载 作者:IT老高 更新时间:2023-10-28 20:47:40 26 4
gpt4 key购买 nike

我正在为多个玩家(线程)同时移动的游戏建模。玩家当前所在位置的信息被存储了两次:玩家有一个变量“hostField”,它引用了棋盘上的一个字段,每个字段都有一个 ArrayList 存储当前位于该字段的玩家。

我对我有冗余信息这一事实不太满意,但我发现如果不循环访问大型数据集,就无法避免这种情况。

但是,当玩家从一个 field 移动到另一个 field 时,我想确保 (1) 冗余信息保持关联 (2) 目前没有其他人在操纵该 field 。

因此我需要做类似的事情

synchronized(player, field) {
// code
}

这是不可能的,对吧?

我该怎么办? :)

最佳答案

一个简单的解决方案是

synchronized(player) {
synchronized(field) {
// code
}
}

但是,请确保您始终以相同的顺序锁定资源以避免死锁。

请注意,在实践中,瓶颈是 field ,因此 field 上的单个锁(或专用的公共(public)锁对象,正如@ripper234 正确指出的那样)可能就足够了(除非您同时操纵其他地方的玩家,冲突的方式)。

关于java - 同步块(synchronized block) - 锁定多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4604003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com