在我的应用程序中,服务器类在启动时加载,所有数据都缓存一次。
它是一个单例类,它的实例变量不是易失的,即
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;
}.......
}
但是在阅读了关于堆栈上 volatile 的文章和 Q/A 之后,我认为 volatile 会使数据再次加载,因为 volatile 会使信息从内存中读取,而不是从缓存中读取。
那么我应该让我的变量 volatile 吗?
如果不稳定,那么我是否必须一次又一次地加载我的数据?