单例模式是一种常用的软件设计模式,属于创建型模式的一种。单例模式,简单来讲,即一个类只有一个实例,并提供一个全局访问点。
以下几个场景会用到单例模式:
懒汉模式(线程安全)
import java.util.Objects;
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (Objects.isNull(instance)) {
instance = new Singleton();
}
return instance;
}
}此种方式由于把锁加到方法中后,所有的访问因为需要锁占用,导致资源浪费。不建议用此种方式实现单例模式。
饿汉模式(线程安全)
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}这种方式,无论程序中是否用到这样的类,都会在程序启动之初进行创建。
使用类的内部类(线程安全)
public class Singleton {
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}这种方式既保证了线程安全,又保证了懒汉模式,同时不会因为加锁而降低性能。推荐!
双重锁校验(线程安全)
import java.util.Objects;
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (Objects.nonNull(instance)) {
return instance;
}
synchronized (Singleton.class) {
if (Objects.isNull(instance)) {
instance = new Singleton();
}
}
return instance;
}
}优点:
缺点:
| 留言与评论(共有 0 条评论) “” |