【发布时间】:2016-12-23 10:30:35
【问题描述】:
我需要像这样创建一个哈希映射:
Map<String, List<Integer>>
我正在使用 2 个线程。
这里是输出地图的示例:
---------------------
| xxx | a b c d |
| yyy | a' b' c' d' |
| zzz | A B C D |
---------------------
两个线程都参与了条目的创建;因此,例如,线程 1 有以下数据集要存储:
-----------------------------------
| 1 | (xxx,a) (yyy,a') (zzz,A) |
| 2 | (xxx,b) (yyy,b') (zzz,B) |
-----------------------------------
线程 2 有:
| 1 | (xxx,c) (yyy,c') (zzz,C) |
| 2 | (xxx,d) (yyy,d') (zzz,D) |
-----------------------------------
因此,在同一时刻,两个线程可能会计算相同的密钥:线程 1 (xxx,a) 和线程 2 (xxx,c)。
我可以使用的最佳锁定/解锁机制是什么?
我尝试了以下一个
ReadWriteLock lock = new ReentrantReadWriteLock();
executor.submit(() -> {
lock.writeLock().lock();
try {
sleep(1);
map.put("foo", "bar");
} finally {
lock.writeLock().unlock();
}
});
但我不想锁定整个哈希映射。我想创建一个锁,如果并且仅当处理期间的两个线程都应该在同一个键上工作。
谢谢
【问题讨论】:
标签: java multithreading locking