[英]Is there a generic solution in Java for mutual exclusion between threads based on a generated key?
可以说我有一个FooClass
,其id
为long类型:
public class FooClass {
long id;
}
任何类中都有一个具有相似签名的方法:
public void shouldBeSynchronizedForAFooClassId(long fooClassId) {
//does something
}
我能做什么:
FooClass
与id
1和FooClass
与id
2可以毫无问题平行地延伸。 Object
为值的Map
。 在这种情况下,我必须使用相同的受监视对象注册线程数,以便一旦不再有任何线程使用被监视对象,便能够清除它们。 我认为,必须有一个现成的解决方案,例如:
在某些库中是否开箱即用?
您可以使用所需的工具,但必须自己组装解决方案,例如ReentrantLocks 的映射
据我所知,没有任何现成的解决方案可以解决您在JDK中面临的问题。
但是番石榴具有Striped ,几乎可以满足您的需求。 它不关联每个ID的锁,而是关联ID的“条带”的锁。 这应该足以避免争执。
您可以使用ID id;
代替long id
ID id;
ID
是您定义的类。 然后,您可以简单地锁定id
对象。
您的ID类可以具有数值,也可以具有其他方便的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.