1

入力引数を取るシングルトンを作成する必要があります。基本的に、いくつかの構成に基づいてライブラリに DBConnector を作成する必要があります。これで、この構成は、消費するアプリによってライブラリに渡されます。渡された構成に基づいて、ライブラリで再利用される DBConnector のインスタンスを作成したいと考えています。これを処理するために DI を使用することを考えましたが、このライブラリが初期化されると、DB 接続が実際に必要かどうかわかりません。必要でない場合は、この DBConnector を作成したくありません。ライブラリが初期化されると、getResponse(RequestType rt) の呼び出しで、(RequestType に基づいて) DBConnector が必要かどうかがわかり、そのときにインスタンスを作成する必要があります。したがって、以下のコードはマルチスレッド環境に適していますか?

public class DBConnectorFactory
{
private static volatile DBConnector dBConnector = null;
private static AtomicReference<DBConnector> atomicReference = new AtomicReference<>();
private DBConnectorFactory()
{}

public static DBConnector getDBConnector(DBConfig dBConfig)
{
    if(dBConnector == null)
    {
        if(atomicReference.compareAndSet(null,new DBConnector(dBConfig)))
            dBConnector = atomicReference.get();
        return atomicReference.get();
    }

    else
        return dBConnector;
}

}

EDIT マルチスレッドテストを書き、すべてのスレッドが同じインスタンスを取得しています。ただし、Java メモリ モデルが原因でエッジ ケースを見逃さないようにしたいだけです。

4

1 に答える 1