java复习之单例模式
单例模式是java中23种设计模式的一种。其实设计模式就是平时开发中人们总结的解决一类问题最行之有效的方法或者是说模板,所以单例模式顾名思义,解决一个类在内存中只存在一个对象的情况。
大体思路:
1.将构造函数私有化;
2.在类中创建一个本类对象;
3.提供一个方法可以获取到该对象。
即:
第一步:private 类名() { }
第二步:private static 类名 对象=new 类名();
第三步:public static 类名 getInstance(){return 对象;}
一、第一种:饿汉式(类一进内存,对象建好并初始化,线程安全)
class Single1{
private Single1() { }
private static final Single1 s=new Single1();
public static Single1 getInstance(){
return s;
}
}
二、第二种:懒汉式(在第一次方法被调用时对象才被建立并初始化,也叫对象的延时加载,不过下面的方式是线不安全的)
class Singleton {
private Singleton() {}
private static Singleton single=null;
public static Singleton getInstance() {
if (single == null) {
//若cpu在这里停止,下一个来访问的则会造成线程不安全
single = new Singleton();
}
return single;
}
}
三、解决上面的懒汉式线程不安全的问题,下面提供两种解决方案
//第一种,通过静态内部类实现的线程安全的懒汉式单例
class Single2_1{
private static class LazyHolder {
private static final Single2 INSTANCE = new Single2();
}
private Single2 (){}
public static final Single2 getInstance(){
return LazyHolder.INSTANCE;
}
}
//第二种:通过线程锁方式实现的线程安全的懒汉式单例
class Single2_2{
private static Single3 s=null;
private Single3(){}
public static Single3 getInstance(){
if(s==null){
synchronized(Single3.class){
if(s==null)
s=new Single3();
}
}
return s;
}
}