1.饿汉式->静态常量[可用]
1 | public class Singleton1 { |
2.饿汉式->静态代码块[可用]
1 | public class Singleton2 { |
3.懒汉式->线程不安全
1 | public class Singleton3 { |
4.懒汉式->线程安全
1 | public class Singleton4 { |
5.懒汉式->线程不安全
1 | public class Singleton5 { |
6.双重检查[推荐使用]
优点:线程安全,效率较高
1 | public class Singleton6 { |
7.静态内部类[推荐用]
1 | public class Singleton7 { |
8.枚举
1 | public enum Singleton8 { |
各种写法的适用场合
- 最好的方法是利用枚举,因为还可以防止反序列化重新创建新的对象
- 非线程安全的方法不能使用
- 如果程序一开始要加载的资源太多,那么就应该使用懒加载
- 饿汉式如果是对象的创建需要配置文件就不适用
- 懒加载虽然好,但是静态内部类这种方式会增加编程的复杂性