从WeakHashMap获取时缓存失效

时间:2016-12-30 12:44:26

标签: java weakhashmap

我通过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());
    }

是否有可能:

如果检查了语句,并且看到缓存中已经有一个对象,那么在运行else语句缓存之前会失效吗?

1 个答案:

答案 0 :(得分:0)

从技术上讲,这是非常罕见的。解决方案很简单:

如果你想使用在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);
    }