DataSource
複数のスレッドからアクセスできる、を格納する静的なfinal属性があります。これDataSource
は、Tomcatの起動時に一度設定されます。
これへのアクセスを同期する必要がありますDataSource
か?私の懸念は、おそらく内部状態がDataSource
1つのスレッドによって変更され、別のスレッドには表示されない可能性があることです。
「読み取り専用」の静的フィールドに同期なしでアクセスできるかどうか、またはいずれの場合でも必須であるかどうかは、まだわかりません。
私はこの回答を読んで、おそらく属性を初期化するメソッドだけを同期する必要があるので、私のコードは大丈夫でしょう:
public static final DataSource myDataSource;
static {
InitialContext context = new InitialContext();
myDataSource = (DataSource) context.lookup("jdbc/DataSource");
}
しかし、それは本当に大丈夫ですか?これをパフォーマンス面で行うための最良の方法は何ですか?