Guava的Cache<K,信号量> with weakValues() 是线程安全的吗?



我需要一种每键锁定机制来保护键绑定的关键部分。

虽然ConcurrentMap<K, Semaphore>足以实现并发,但我也不希望映射累积旧密钥并无限增长。

理想情况下,数据结构最终(或紧随其后(释放用于锁未使用的密钥的内存。

我有点认为 Guava 用weakValues()建造的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);
            }
        });

是否有任何原因可能导致这可能无法提供足够的并发控制?

或者为什么这可能不会导致未使用的对被垃圾回收?

是的,那会起作用。

还有一个或多或少为这个用例设计的数据结构:Striped

相关内容

  • 没有找到相关文章

最新更新