单例模式包括懒汉式、饿汉式
单例模式最大特点就是构造函数私有化
单例类只有一个实例
一 懒汉式
这里介绍最基本的一种
public class Singleton{
private Singleton single=null;
private Singleton(){
}
public static getInsatcnce(){
if(single==null){
single=new Singleton();
}
return single;
}
}
这个是最基础的一种,但是没有考虑多线程问题
2 加锁
public class Singleton{
private Single single=null;
private Single(){
}
public static synchronized Singleton getInstance(){
if(single==null){
single=new Single();
}
return single;
}
}
加锁可以解决两个线程同时访问的问题,但是加锁会耗费性能
3 使用静态内部类
public class Singleton(){
private static class LayLoader{
private final static Singleton single=new Singleton();
}
private Singleton(){
}
public static Singleton getInstance(){
return LayLoader.single;
}
}
首先需要说明,加载一个类时,静态内部类不会被加载, 静态内部类只有在访问静态内部类里的方法,域下才会加载静态内部类。因此第一次调用时会初始化实例
二 饿汉式
public class Singleton{
private static final Singleton single=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return single;
}
}
饿汉式是实例在类加载时就会初始化,因此很耗费资源,但是保证了线程安全。
懒汉式中推荐使用静态内部类,既保证线程安全,又可以在第一次访问时加载实例
不会浪费无用资源