具有弱引用的ConcurrentHashmap

时间:2013-08-19 10:40:07

标签: java hashmap weak-references java.util.concurrent

我遇到了问题,需要一些帮助来解决这个问题 在我的申请中。我有一个ConcurrentHashMap,其中多个线程可以同时存储或检索数据。为了解决这个问题,我选择了。现在问题在一段时间后我的应用程序中不再需要几个数据了。所以,我需要它们被垃圾收集。在WeakHashMap的情况下,它很容易,因为每当密钥为空时,也会删除值以进行垃圾收集。 Nut如何为ConcurrentHashMap实现WeakReference样式。

2 个答案:

答案 0 :(得分:1)

根据您的性能要求,您可以使用Collections.synchronizedMap(weakHashMap)最简单的选项。

答案 1 :(得分: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
    }

    ...

}