Java 实现四种单例(都是线程安全)
前言
单例分为饿汉式和懒汉式:
饿汉式:类加载时就被创建,一种实现
懒汉式:只有需要的时候才创建,三种实现(synchronized 在方法上,synchronized 在代码块上,静态内部类)
Coding
//懒汉式单例,方法上使用 synchronized 来保证现程安全
public class Singleton {//懒汉式private static Singleton instance;private Singleton() {//私有构造方法,防止外部实例化}//使⽤了同步关键字来确保线程安全, 可能会影响性能public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}//在懒汉式的基础上,可以使用双重检查锁来提高性能
public class Singleton {private static Singleton instance;private Singleton() {//私有构造方法,防止外部实例化}//在懒汉式的基础上,可以使用双重检查锁来提高性能public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}//在懒汉式的基础上,使用静态内部类,静态内部类在外部类加载时不加载
// 就算我多次调用getInstance,SingletonHolder 类也只会被加载一次(第一次调用时加载)
public class Singleton {// 私有构造方法,防止外部实例化private Singleton() {}// 静态内部类private static class SingletonHolder {// 静态内部类加载时创建单例实例private static final Singleton INSTANCE = new Singleton();}// 获取实例的方法public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}//饿汉式单例
public class Singleton {private static final Singleton instance = new Singleton();private Singleton(){//私有构造方法,防止外部实例化}public static Singleton getInstance(){return instance;}
}