
您可以使用下面与您的代码等效的代码来使其短一些。我已经对数以千计的线程进行并发访问进行了一些压力测试:它按预期运行,并执行了许多重试(循环)(显然,您无法在并发世界中通过测试来证明其正确性)。
public void insertOrReplace(String key, String value) { for (;;) { String oldValue = concurrentMap.putIfAbsent(key, value); if (oldValue == null) return; final String newValue = recalculateNewValue(oldValue, value); if (concurrentMap.replace(key, oldValue, newValue)) return; }}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)