【问题标题】:Cache Invalidation while Getting from WeakHashMap从 WeakHashMap 获取时缓存失效
【发布时间】:2016-12-30 12:44:25
【问题描述】:

我通过 WeakHashMap 缓存数据库连接对象,如下所示:

    Connection conn;
    if (connectionCache.get(jdbc.getConnectionURL()) == null) {
        conn = DriverManager.getConnection(jdbc.getConnectionURL(), jdbc.getUsername(), jdbc.getPassword());
        connectionCache.put(jdbc.getConnectionURL(), conn);
    } else {
        conn = connectionCache.get(jdbc.getConnectionURL());
    }

有没有可能:

检查 if 语句,发现缓存中已经有一个对象,在运行 else 语句之前缓存无效?

【问题讨论】:

    标签: java weakhashmap


    【解决方案1】:

    从技术上讲,它是但极为罕见。解决方案很简单:

    如果你想使用 if 中检查的值,它不为 null,你可以在 if 中赋值,这样你就不需要在 else 中再次从缓存中检索它:

        Connection conn;
        if ((conn = connectionCache.get(jdbc.getConnectionURL())) == null) {
            conn = DriverManager.getConnection(jdbc.getConnectionURL(), jdbc.getUsername(), jdbc.getPassword());
            connectionCache.put(jdbc.getConnectionURL(), conn);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-10
      • 2018-12-28
      • 2015-04-29
      • 1970-01-01
      • 2015-07-21
      • 2017-09-08
      • 2014-08-03
      • 2017-12-20
      相关资源
      最近更新 更多