怎么创建获取到懒汉单例
创建懒汉单例的步骤如下:
- 将类的构造方法私有化,以防止外部直接创建对象。
- 创建一个私有的静态变量,用于保存单例对象的实例。
- 创建一个公共的静态方法,用于返回单例对象的实例。
- 在公共的静态方法中,判断单例对象的实例是否已经被创建,如果没有则创建一个新的实例并赋值给静态变量,如果已经创建则直接返回静态变量的值。
- 注意在多线程环境下可能会出现线程安全问题,需要进行同步处理,可以使用synchronized关键字或者双重检查锁定等方式来解决。
下面是一个示例代码:
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
// 私有构造方法
}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
在上面的代码中,getInstance()方法使用了synchronized关键字来实现了线程安全,但是这种方式会导致每次调用getInstance()方法时都需要进行同步,性能较低。
如果对性能要求比较高,可以使用双重检查锁定来实现懒汉单例,示例代码如下:
public class LazySingleton {
private static volatile LazySingleton instance;
private LazySingleton() {
// 私有构造方法
}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
在双重检查锁定的方式中,先判断instance是否已经被创建,如果没有再进行同步操作,这样可以减少不必要的同步开销,提高性能。同时,需要注意使用volatile关键字来保证instance在多线程环境下的可见性和有序性
原文地址: https://www.cveoy.top/t/topic/hQc6 著作权归作者所有。请勿转载和采集!