在java中一共有23种设计模式,
这里学习的是其中的一种:单例设计模式
-
首先,我们说一下单例的定义:
- 单例就是程序在运行期间不管通过什么途径,执行创建的对象都是同一个。
- 而且对象的生命周期是整个项目运行期间。
- 单例有两种写法:饿汉式与懒汉式
下面我们来依次介绍一下:
在写单例的时候,我们需要定义一个类:
//饿汉式
class Person {
//单例可以实现共享数据
//加static可以是实现对象的生命周期为整个项目运行期间
static Person person = new Person();
//不管在哪里调用的都是person对象
static Person getInstance() {
return person;
}
//我们每次都是通过调用getInstance这个方法来创建对象,我们这个方法会返回person,所以每次都是同一个对象;
}
//懒汉式
class Student {
//volatile (为了防止栈的缓存) 每个线程都有自己的栈,他与synchronized构成双层保险,确保唯一性;
volatile static Student stu = null;
static Student getInstance() {
synchronized (Student.class) {
if (stu == null) {
stu = new Student();
}
}
return stu;
}
}
- 我们可以在main函数中测试一下
- 这里我们写一个循环,创建10个student对象,
public static void main(String[] args) {
//Person p = Person.getInstance();
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
public void run() {
Student student = Student.getInstance();
System.out.println(student);
}
}).start();
}
}
- 打印会发现,打印的都是同一个对象;