单例模式定义:
在全局中只有一个class实例,也就是说只有一个这个类的对象
实现有两种方式
第一种饿汉式:
public class A {
private A(){}//私有化构造函数
private static a= new A();
Public Static A getA(){
return a;
}
}
解释:在类的初始化的时候,就将这个单例对象创建出来了,保存在静态方法区备用,等到用的时候,采用静态方法直接返回这个创建好的对象,
好处:线程绝对安全,单例永不变。
第二种懒汉式:
public class A {
private A(){}//私有化构造函数
Private A ;
public static A getA(){
if(A == null){
A = new A();
}
return A;
}
}
好处:类在加载的时候不会加载这个对象,而是在第一次调用的时候才去创建这个对象,节省了内存空间。但是线程不安全,多线程情况下,必须将getA方法用同步修饰,保证线程安全。
应用场景有:
1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。