这是一个组合问题:
假设我有多个线程需要锁定诸如用户ID之类的值。例如,我想隔离与给定播放器相关的数据库操作,以便与ID 5相关的操作可以与ID 7上的操作同时运行,但如果ID 5上的操作正在运行,则ID 5上的另一个操作将不得不等待。我以前使用过这个例子中的代码:http://illegalargumentexception.blogspot.com/2008/04/java-synchronizing-on-transient-id.html但是想要一些Java核心的东西,并且可以使用泛型来轻松地将它与其他数据类型(如int或long)一起使用。
如何使用AND或OR逻辑选择性地锁定其中两种变量?例如,假设我有一个消息传递系统,客户端可以相互发送消息,但我想让线程阻塞任何一个ID?换句话说,如果我想在ID 5和7之间进行操作,我想等待EITHER 5或7上的任何正在运行的操作在解锁之前完成。
感谢您的任何指示!
答案 0 :(得分:0)
我自己没有做过这样的事情,但我会建立一个哈希表,将id映射到Lock
。 id是原语的事实应该不是问题,您可以在哈希表中使用Integer
或Long
变体来表示键。
有关Lock
的更多信息