【问题标题】:ConcurrentHash map with Weak Reference弱引用的 ConcurrentHash 映射
【发布时间】:2013-08-19 10:40:07
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 但这不会允许多个线程同时在地图上工作。因此,性能会受到影响。在我的情况下,性能包含一个非常好的点
  • 在这种情况下,您可以查看this 问题以获取更多想法。
  • Google multimap 和 WeakHashMap 的工作方式不完全相同(根据 POST 中的 cmets)
【解决方案2】:
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
    }

    ...

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多