单例模式:主要解决一个全局使用的类频繁创建和销毁的问题。单例模式下可以确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有三个要素:1、某个类只能有一个实例;2、必须自行创建这个实例3、必须自行向整个系统提供这个实例。
为什么需要单例模式:有的类创建和销毁资源消耗大,并且对象可以复用,会造成不必要的资源浪费。
1、饿汉式(一开始就实例化对象):基于class loader机制避免多线程的同步问题。但是,instance在类装载时就实例化,可能会产生垃圾对象。
public class singleton{
private static singleton instance=new singleton(); //直接初始化一个实例对象
private singleton(){ //private类型的构造函数,保证其他类对象不能直接new一个对象的实例
}
public static singleton getinstance(){
return instance;
}
}
2、懒汉式(实例对象是在第一次被调用的时候才构建的):通过双重锁机制实现线程安全。
public class Singleton{
private static singleton instance;
private singleton(){
}
public static singleton getinstance(){ //对获取实例的方法进行同步
if(instance==null){ //如果为空再进行实例化
synchronized (singleton.class); //对构建实例加互斥锁
if(instance==null){ //二次判空是为了防止第一次判空时已有多个进入
instance=new singleton();
}
}
return instance;
}
}