带有弱引用的ConcurrentHash映射

问题描述 投票:0回答:2

我陷入了一个问题,确实需要一些帮助来解决这个问题在我的应用程序中。我有一个ConcurrentHashMap,其中多个can线程可以同时存储或检索数据。为了解决这个问题,我选择了。现在,经过一段时间后,我的应用程序中不再需要很少的数据了。因此,我需要将它们收集起来。在WeakHashMap的情况下,这很容易,因为如果密钥为null,则值也将被删除以进行垃圾回收。螺母如何为ConcurrentHashMap实现WeakReference样式。

java hashmap weak-references java.util.concurrent
2个回答
1
投票

根据您的性能要求,可能会发现使用Collections.synchronizedMap(weakHashMap)是最简单的选择。


0
投票
class ConcurrentWeekHashMap<K, V> {
    private val lock = ConcurrentHashMap<K, V>()
    private val weekMap = WeakHashMap<K, V>()

    fun put(key: K, value: V): V? {
        var result: V? = null
        lock.compute(key) { _, _ ->
            result = weekMap.put(key, value)
            null
        }
        return result
    }

    fun get(key: K): V? {
        var result: V? = null
        lock.compute(key) { _, _ ->
            result = weekMap[key]
            null
        }
        return result
    }

    ...

}

© www.soinside.com 2019 - 2024. All rights reserved.