java单例模式

在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(); 
        }
    }
  • 打印会发现,打印的都是同一个对象;

你可能感兴趣的:(java单例模式)