单例模式中懒汉式和饿汉式 实现和总结
2010-11-03 16:00
99 查看
先看懒汉式单例模式
再看饿汉式单例模式
测试
输出结果
分析,总结:
1,两种形式instance和构造方法都用private;
2,instance和getInstance()都用static;
3,饿汉式instance用final;
4,懒汉式getInstance()用synchronized才能保证线程安全;
5,饿汉式的instance定义时就初始化instance = new Singleton(),线程是安全的,且不论后期是否用到都初始化了,所以牺牲了资源利用率,一旦用到又将提高速度;
6,懒汉式的instance是在使用时才初始化的,所以提高了资源利用率,但是用到时会浪费速度;
7,尽量用饿汉式单例模式,简单、好用、安全。
public class Singleton { private static Singleton instance = null; private Singleton(){ System.out.println(1); } synchronized public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
再看饿汉式单例模式
public class Singleton2 { private static final Singleton2 instance = new Singleton2(); private Singleton2(){ System.out.println(2); } public static Singleton2 getInstance(){ return instance; } }
测试
public class SingletonTest { public static void main(String[] args){ //测试懒汉式 Singleton s11 = Singleton.getInstance(); Singleton s12 = Singleton.getInstance(); if(s11 == s12){ System.out.println("same singleton"); }else{ System.out.println("not same singleton"); } //测试饿汉式 Singleton2 s21 = Singleton2.getInstance(); Singleton2 s22 = Singleton2.getInstance(); if(s21 == s22){ System.out.println("same singleton2"); }else{ System.out.println("not same singleton2"); } } }
输出结果
1 same singleton 2 same singleton2
分析,总结:
1,两种形式instance和构造方法都用private;
2,instance和getInstance()都用static;
3,饿汉式instance用final;
4,懒汉式getInstance()用synchronized才能保证线程安全;
5,饿汉式的instance定义时就初始化instance = new Singleton(),线程是安全的,且不论后期是否用到都初始化了,所以牺牲了资源利用率,一旦用到又将提高速度;
6,懒汉式的instance是在使用时才初始化的,所以提高了资源利用率,但是用到时会浪费速度;
7,尽量用饿汉式单例模式,简单、好用、安全。
相关文章推荐
- Java实现单例模式之饿汉式、懒汉式、枚举式
- 单例模式的各种写法和总结 懒汉式 饿汉式 登记式
- 单例模式的实现代码:懒汉式、饿汉式、登记式
- JAVA面向对象知识点总结(4)— 单例设计模式:饿汉式、懒汉式
- 单例模式的懒汉式和饿汉式实现分析
- 单例模式的简单实现与两种实现方法的比较(饿汉式和懒汉式)(二)
- Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。
- 单例模式三种实现----饿汉式 饱汉式(懒汉式) 双重锁模式--------(java复习)
- 单例模式的两种实现方式:懒汉式 饿汉式
- Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。
- ios-单例模式饿汉式&GCD&懒汉式&宏方式的实现和条件编译
- 单例模式的三种实现 HungrySingleton(饿汉式) LazySingleton1(懒汉式:方法级锁) LazySingleton2(懒汉式:双检查锁 有BUG)
- iOS-单例模式(懒汉式和饿汉式)和GCD实现
- 设计模式-单例模式(饿汉式及懒汉式的Java实现)
- 单例模式的简单实现与两种实现方法的比较(饿汉式和懒汉式)(一)
- 单例模式中,懒汉式和饿汉式的区别
- 单例设计模式(懒汉式,饿汉式,枚举式,双重检测锁式,静态内部类式)
- 设计模式中饿汉式单例类和懒汉式单例类
- (2.2.2.1)设计模式--单例模式(一)懒汉式和饿汉式