假设您有这种代码:
public final class SomeClass
{
private final Map<SomeKey, SomeValue> map = new HashMap<SomeKey, SomeValue>();
// ...
public SomeValue getFromCache(final SomeKey key)
{
SomeKey ret;
synchronized(map) {
ret = map.get(key);
if (ret == null) {
ret = buildValue(key);
map.put(key, ret);
}
}
return ret;
}
//etc
}
问题在于性能:如果buildValue()
是一个昂贵的函数,那么一个调用者必须建立它的值将阻塞所有其他调用者,其值可能已经存在。我想找到一种机制,在这种机制中,调用者必须构建一个值不会阻塞其他调用者。
我不敢相信这个问题还没有得到解决(和解决)。我试图用谷歌搜索解决方案,但到目前为止找不到。你有链接吗?
我正在考虑使用 a ReentrantReadWriteLock
,但还没有任何东西。