0

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

4

2 回答 2

1

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

于 2013-08-19T10:47:19.520 回答
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
    }

    ...

}

于 2019-10-10T03:52:53.840 回答