- 饿汉式单列模式类:在这个类每次加载到内存中就直接把instance实例化好了
package com.xianyu.singleton;
public class Program1 {
public static void main(String[] args) {
User user = User.getUser();
for (int i = 0; i < 1000; i++) {
User u = User.getUser();
if(user != u){
System.out.println("生成新的对象");
}
}
System.out.println("程序结束");
}
}
class User{
private User(){}
private static User instance = new User();
public static User getUser(){
return instance;
}
}

- 懒汉式
package com.xianyu.singleton;
public class Program2 {
public static void main(String[] args) {
Person person = Person.getPerson();
for (int i = 0; i < 1000; i++) {
Person p = Person.getPerson();
if(person != p){
System.out.println("生成新的对象");
}
}
System.out.println("程序结束");
}
}
class Person{
private Person(){}
private static Person instance;
public static Person getPerson(){
if(instance == null){
instance = new Person();
}
return instance;
}
}

- 懒汉式单列设计模式在多线程中的问题
package com.xianyu.singleton;
public class Program3 {
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
Thread t = new Thread(()->{
Teacher.getTeacher();
});
t.start();
}
}
}
class Teacher{
private Teacher(){
System.out.println("**********调用构造器*********");
};
private static Teacher instance;
public static synchronized Teacher getTeacher(){
if(instance == null){
instance = new Teacher();
}
return instance;
}
}