单例模式
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式。
思想:始终在内存中只有一个对象
饿汉式和懒汉式
1.饿汉式:类加载的时候就已经创建好对象了
静态实例,构造方法私有化,公共的访问方法返回实例(创建对象),是线程安全的。
//饿汉式
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
jdk提供典型的类:Runtime:就是饿汉式
2.懒汉式:先声明,你要用才创建对象
是线程不安全的
//懒汉式
public class LazySingleton {
private static LazySingleton lazySingleton ;
private LazySingleton(){}
//是线程不安全的
/* public static LazySingleton getInstance(){
if(lazySingleton==null){
lazySingleton = new LazySingleton();
}
return lazySingleton;
}*/
//解决线程安全问题:加锁(同步方法或者同步代码块)
//public static synchronized LazySingleton getInstance(){}
public static LazySingleton getInstance(){
/*双重检验锁,可能会有多个线程一起进入同步块外的 if,
如果在同步块内不进行二次检验的话就会生成多个实例了。*/
if(lazySingleton==null){
synchronized (LazySingleton.class){
if(lazySingleton==null){
lazySingleton = new LazySingleton();
}
}
}
return lazySingleton;
}
}