基于Map的内容进行同步

时间:2017-03-27 17:56:37

标签: java multithreading java-8

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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