[英]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.