私のアプリケーションでは、Server クラスは起動時にロードされ、すべてのデータが一度にキャッシュされます。
これはシングルトン クラスであり、そのインスタンス変数は揮発性ではありません。
private static Server server;
findbug 分析の後、それを volatile に変更する必要があります (以下に表示)
public class Server {
private static volatile Server server;
public static Server getInstance(){
if(server == null){
synchronized (Server .class) {
if(server == null){
try {
server = new Server(....);
} catch (IOException e) {
Logger.logError(MODULE, "IO Error while creating server home location: " + strServerHome);
Logger.logTrace(MODULE, e);
}
}
}
}
return server;
}.......
}
しかし、スタック上の揮発性に関する記事と Q/A を読んだ後、揮発性はキャッシュではなくメモリから情報を読み取るため、揮発性はデータを再度ロードすると思います。
では、変数を揮発性にする必要がありますか?
volatile の場合、データを何度もロードする必要がありますか?