java - 这个同步锁顺序有效吗?

标签 java locking deadlock synchronized

我写了一个游戏,有时会陷入死锁,在谷歌搜索该问题后,似乎锁定顺序方法可能有效,所以我到这里来确保它不会出现问题。

最多会有三个用户相互交互:A、B 和 C。

行动包括攻击、夺回和营救

示例:A攻击B,B从A手中夺回,A从C手中救出B

每个用户都有一个唯一的 ID

如果我在按 ID desc 或 asc 排序的用户对象上进行同步,则两个用户之间的交互似乎可以工作。但它可以在救援行动中与三个用户一起使用吗?

最佳答案

只要以相同的顺序获取所有锁,就不会出现死锁。因此,只要“A 从 C 拯救 B”按照 A、B、C 的顺序获取锁,并且“B 从 A 拯救 C”按照 A、B、C 的顺序获取锁,您就可以应该没问题。

关于java - 这个同步锁顺序有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725805/

相关文章:

java - 银行转账同步

go - 为什么 channel 上的 go-routine block 被认为是死锁?

java - 我用什么来从应用程序服务器发送 SMS 消息?

java - 如何在 Java 中将 UTF-16 转换为 ISO/IEC 8859-1 拉丁文并适当替换特殊字母?

java - Rails/Devise - 不可处理的实体

c# - ConcurrentDictionary 线程安全到我可以将它用于静态缓存的程度吗?

java - 使用 Java 和 MongoDB 进行参数化查询

mongodb - MongoDB 真的有一个全局读/写锁吗?

sql - 需要mysql死锁解释

java - 多线程中的套接字 "deadlocked"Java