释放地图锁定并获取值的锁定

时间:2013-06-21 18:16:07

标签: java multithreading locking

我想在一个方法上使用一个只打印尚未收到的数字的方法,因此我使用了以下代码。我的想法是,我使用一个映射,对于每个整数,它存储一个锁,如果一个线程已经在映射中,则一个线程在锁上等待,否则它会将一个新的锁放入映射中,并将该整数作为键和{{1 object作为值,

注意:我使用Integer作为整数Integer(a)

的锁

问题是我想释放地图的锁定,我想等待从地图中检索到的锁定,但是发生了a,是否有解决问题的想法?

race condition

2 个答案:

答案 0 :(得分:0)

您可以通过将lock_map替换为ConcurrentHashMap来消除HashMap上的锁定。将lock_map.put更改为lock_map.putIfAbsent

答案 1 :(得分:0)

您的wait不在循环中。有关可能产生问题的原因,请参阅elsewhere