单例模式的实现方案:建立一个类,其构造方法都是私有的,只有一个getInstance()方法是public的,通过这个方法获取该类的唯一实例,即让类自身保存这个唯一的实例。
(1)懒汉式,线程不安全
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
(2)懒汉式,线程安全
最简单的方法就是将整个getInstance()方法设为同步(Synchronized)。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
(3)双重检验锁,线程安全
虽然(2)做到了线程安全,并且解决了多实例的问题,但它并不高效。因为在任何时候只能有一个线程调用getInstance()方法。但是同步操作只需要在第一次调用时才被需要,即第一次创建单实例对象时。这就引出了双重检验锁。
双重检验锁模式,是一种使用同步块加锁的方法。程序员称其为双重检查锁,因为会有两次检查(instance==null),一次是在

本文详细介绍了Java中实现线程安全单例模式的多种方法,包括懒汉式、双重检验锁、饿汉式、静态内部类和枚举方式。针对懒汉式和双重检验锁,文章解释了线程安全问题及解决方案,特别强调了volatile关键字的作用。总结了各种方法的优缺点,为开发者选择合适的单例实现提供了指导。
最低0.47元/天 解锁文章
2522

被折叠的 条评论
为什么被折叠?



