从 WeakHashMap 获取时缓存失效
Cache Invalidation while Getting from 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 语句缓存之前无效?
从技术上讲是这样,但极为罕见。不过解决方法很简单:
如果你想使用 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);
}
我通过 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 语句缓存之前无效?
从技术上讲是这样,但极为罕见。不过解决方法很简单:
如果你想使用 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);
}