0

次のように、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 ステートメントを実行する前にキャッシュが無効になりますか?

4

1 に答える 1

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);
    }
于 2016-12-30T12:56:29.457 に答える