Недействительность кэша при получении из 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 ответ

  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);
        }