单例模式的特点:
- 一个单例类只能有一个实例。
- 单例类需要自己实例化。
- 这个类必须给其他对象提供这一实例化方法。
这就保证了单例类的构造函数一定是私有的,并且必须要提供一个公有的方法来获取到该类的实例对象。
懒汉式单例 :
在第一次调用实例化函数的时候初始化自身,但是若是多线程执行,他便是不安全的,很有可能创建多个实例化对象。我们可以通过synchronized锁来进行同步。
class Test{
private static Test test = null;
private Test(){}
public static synchronized Test getTest(){
if(test!=null){
return new Test();
}
return test;
}
}
饿汉式单例 :
在类被调用的时候初始化自身,这种单例模式的设置是线程安全的,即使多线程也没有机会产生出多个实例。
class Test{
private Test(){ }
private static final Test test = new Test();
public static Test getTest(){
return test;
}
}