单例模式

概念:通俗来说,就是一个类只有一个实例。

场景:对共享资源的占用,例如打印机,可以有多个打印任务,但只有一个打印任务可以占用打印机。

实现:通过私有化构造方法,使该类只能在内部实例化。

      1.  懒汉模式,在调用该方法的时候实例化对象。(线程安全,但存在线程同步的性能开销):

    public class Singleton {

private static Singleton instance;

private Singleton(){}

public static synchronized Singleton Singleton(){
if(instance == null){
instance = new Singleton();
System.out.println(Thread.currentThread().getId());
}
return instance;
}
}

2. 饿汉模式,通过静态变量在类加载的时候实例化对象。(类初始化的时候实例对象,线程安全)
    public class Singleton {
        private static Singleton instance = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
            return instance;
        }
    }


同时复习一下类的加载顺序:
如果类还没有被加载: 
1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。 
2、执行子类的静态代码块和静态变量初始化。 
3、执行父类的实例变量初始化 
4、执行父类的构造函数 
5、执行子类的实例变量初始化 
6、执行子类的构造函数 

如果类已经被加载: 
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。

posted on 2018-03-01 11:21  艾格瑞奈尔  阅读(151)  评论(0)    收藏  举报

导航