我通过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语句缓存之前会失效吗?
答案 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);
}