概念
- java中单例模式是一种常见的设计模式,单例模式的写法有好几种.这里主要介绍:懒汉式 饿汉式.
单例模式有以下特点:
- 单例类必须只能有一个实例.
- 单例类必须自己创建自己的唯一实例.
- 单例类必须给所有其他对象提供这一实例.
单例的好处
- 当一个对象在程序内部只能有一个实例的时候,它可以保证我们不会重复创建,而是始终指向同一个对象.
- 对象的盛名周期是整个项目运行期间.
//单例
public class Test1 {
public static void main(String[] args) {
Person p = Person.getInstance();
Person p1 = Person.getInstance();
}
}
//d单例:在程序在运行期间不管通过什么途径,执行创建一个对象
//对象的生命周期是整个项目运行期间
class Person{//饿汉式单例模式
//static
static Person person = new Person();
static Person getInstance(){//静态工厂的方法
return person;
}
}
class Student {//懒汉式单例模型
//volatile每个线程都有自己的栈
volatile static Student stu = null;
static Student getInstance(){
synchronized (Student.class) {
if (stu == null) {
stu = new Student();
}
}
return stu;
}
}
在上述代码中Person类是一开始就创建了空间,属于饿汉式单例模式.
- 优点:在类加载初期就创建对象,调用getInstance的时候,没有同步方法,运行时性能较高.
- 缺点:类加载速度慢,占用太多的资源空间.
而Student是在用的时候创建空间,属于懒汉式单例模型 - 优点: 避免了第一种方法的缺点,同时,可以在多线程下运行安全.
- 缺点:因为使用了锁,在运行中效率慢.
volatile关键字是起到双重保障的作用.