我想在一个方法上使用一个只打印尚未收到的数字的方法,因此我使用了以下代码。我的想法是,我使用一个映射,对于每个整数,它存储一个锁,如果一个线程已经在映射中,则一个线程在锁上等待,否则它会将一个新的锁放入映射中,并将该整数作为键和{{1 object作为值,
注意:我使用Integer
作为整数Integer(a)
问题是我想释放地图的锁定,我想等待从地图中检索到的锁定,但是发生了a
,是否有解决问题的想法?
race condition
答案 0 :(得分:0)
您可以通过将lock_map
替换为ConcurrentHashMap来消除HashMap
上的锁定。将lock_map.put
更改为lock_map.putIfAbsent
。
答案 1 :(得分:0)
您的wait
不在循环中。有关可能产生问题的原因,请参阅elsewhere。