1、饿汉式
饿汉式:指全局的单例实例在类加载时构建。 立即初始化。
速度快,不调用时也创建
类被加载时,静态变量instance会被初始化,此时类的私有构造函数会被调用。
- public class Singleton1 {
- Singleton1(){}
- private static Singleton1 instance=new Singleton1();
- public static Singleton1 getlnstance(){
- return instance;
- }
- }
复制代码
2、懒汉式
懒汉式:指全局的单例实例在第一次被使用时构建。延迟初始化。
速度慢,调用时才创建
改进后的代码(双重加锁)
- public class Singleton2 {
- private Singleton2(){}
- private static Singleton2 instance;
- public synchronized static Singleton2 getlnstance(){
- init();
- if(instance==null){
- synchronized(Singleton2.class){
- if(instance==null)
- instance=new Singleton2();
- }
- return instance;
- }
- return instance;
- }
- private static void init(){}
- }
复制代码 饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
最好使用第一种
|
|