Java ConcurrentHashMap如何仅在Map大小小于X时添加元素

njthzxwz  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(113)

有没有更聪明的办法?

....
synchronized (myMap) {
            if (myMap.size() < 5) {
                myMap.putIfAbsent("something", true);
            }
        }
...
1tuwyuhd

1tuwyuhd1#

不仅没有一种聪明的方法来实现这一点,而且您所展示的方法也不会起作用。synchronized不锁定ConcurrentHashMap,后者使用完全不同的机制来实现其内部并发性;size调用和put之间仍然存在竞争。
您可以考虑使用Caffeine这样的缓存库,它可以满足您的需要。

dffbzjpn

dffbzjpn2#

一种方法是使用内置的computeIfAbsent(Key,Function)函数并检查是否存在特定的键,使用computeIfAbsent()的Function部分计算键的值,您可以添加条件来检查ConcurrentHashMap的大小。

int initialCapacity = 1;
    ConcurrentHashMap<String,String> a=new ConcurrentHashMap<>();
    a.computeIfAbsent("b",x->{return a.size()<=initialCapacity?"800":null;});
    System.out.println(a);

供参考-https:www.geeksforgeeks.org/concurrenthashmap-computeifabsent-method-in-java-with-examples/

相关问题