基于Map的内容进行同步

iam*_*mat 2 java multithreading java-8

我想同步一段代码,但不想简单地锁定实现类(this).

有问题的代码块是一个接收id的方法的一部分.

如果传入方法的id包含在类的列表中,我想禁止新线程进入块...如果它不在列表中,则实体可以自由操作,因此线程将是允许进入街区......

有没有直接的方法来做到这一点?

Kay*_*man 5

JDK中没有明确的类,但正如(上一个)重复中所述,您可以使用它ConcurrentHashMap来实现这种行为.

Guava提供了Striped类,它为您提供了很多配置的良好解决方案,例如懒惰地创建锁和弱锁,以及配置要使用的条带(锁)的数量.