【发布时间】:2016-02-15 13:12:00
【问题描述】:
我需要一个按键锁定机制来保护键绑定的关键部分。
虽然ConcurrentMap<K, Semaphore> 足以满足并发性,但我也不希望映射累积旧键并无限增长。
理想情况下,数据结构将最终(或紧接着)释放用于未使用锁的键的内存。
我有点想用weakValues() 构建的 Guava 的 Cache 可以解决问题:
private static final LoadingCache<K, Semaphore> KEY_MUTEX = CacheBuilder.newBuilder()
.weakValues()
.build(new CacheLoader<K, Semaphore>() {
@Override
public Semaphore load(K key) throws Exception {
return new Semaphore(1);
}
});
这可能无法提供足够的并发控制有什么原因吗?
或者这可能不会导致未使用的对被垃圾收集的原因?
【问题讨论】:
标签: java multithreading guava weak-references