1

这是一个有点组合的问题:

  1. 假设我有多个线程需要锁定用户 ID 等值。例如,我想隔离与给定玩家相关的数据库操作,以便与 ID 5 相关的操作可以与 ID 7 上的操作同时运行,但如果 ID 5 上的操作正在运行,则 ID 5 上的另一个操作将不得不等待。我以前使用过此示例中的代码:http: //illegalargumentexception.blogspot.com/2008/04/java-synchronizing-on-transient-id.html但想要 Java 的核心并且可以使用泛型轻松允许这将与其他数据类型(如整数或长整数)一起使用。

  2. 我将如何选择使用 AND 或 OR 逻辑锁定其中两种变量?例如,假设我有一个消息传递系统,客户端可以在其中相互发送消息,但我想让线程阻塞任一 ID?换句话说,如果我想在 ID 5 和 7 之间进行操作,我想在解锁之前等待任何在 5 或 7 上运行的操作首先完成。

感谢您的任何指点!

4

1 回答 1

0

我自己没有做过类似的事情,但我会构建一个将 id 映射到Locks 的哈希表。id 是原语这一事实应该不是问题,您可以在哈希表中使用IntegerorLong变体作为键。

Lock有关的更多信息

于 2013-05-05T22:18:25.987 回答