我正在尝试将模块实例设置为单例。碰到了article,其中谈到了实现单例实例创建的各种方法,还涉及了破坏性的双重检查锁定以及使用volatile避免这种情况的方法。
在阅读了更多有关volatile的内容之后,线程似乎永远不会缓存该变量,并且将始终从主内存中读取该变量以进行计算。如果我使用volatile关键字实现单例,则我的应用始终会从主内存中读取,因此会受到性能的影响。
遇到了以下疑问,
如果我在UI线程中使用此应用程序,将会对性能产生影响吗?
示例易失性实现,
private static volatile ResourceService resourceInstance;
//lazy Initialiaztion
public static ResourceService getInstance () {
if (resourceInstance == null) { // first check
synchronized(ResourceService.class) {
if (resourceInstance == null) { // double check
// creating instance of ResourceService for only one time
resourceInstance = new ResourceService ();
}
}
}
return resourceInstance;
}