一.饿汉
package 单例模式饿汉;
public class student {
//私有化无参构造,外部无法创建该对象
private student() {
}
//私有化对象建立
private static student s=new student();
//方法返回该对象
public static student get() {
return s;
}
}
package 单例模式饿汉;
//饿汉式
//特点:在加载student类的时候,则student的对象就建立完毕
public class DEMO {
public static void main(String[] args) {
//通过student的方法调用
student s1=student.get();
student s2=student.get();
System.out.println(s1);
System.out.println(s2);
//单例模式.student@70dea4e
//单例模式.student@70dea4e
//两个地址值都相同,因为student类中私有化了构造方法
//所以加载该对象的时候创建的类的地址值都是相同的
}
}
二.懒汉
package 懒汉;
public class student {
private student() {
}
private static student s=null;
// public static student get() {
// synchronized (s) {
// if(s==null) {
// s=new student();
// }
// return s;
// }
// }
//另一种同步机制
public synchronized static student get1() {
if(s==null) {
s=new student();
}
return s;
}
}
package 懒汉;
/**
* 懒汉式:
* 符合单例模式核心思想
* 1)自定义一个类,将无参构造私有化
* 2)在成员位置声明变量
* 3)提供公共静态功能,在里面判断的创建该类对象,返回该类对象
*
* 但在使用中会出现多线程问题,即多条语句对student共同操作
* 为了防止出现问题,加入同步机制
*/
public class demo {
public static void main(String[] args) {
// student s1 = student.get();
// student s2 = student.get();
// System.out.println(s1);
// System.out.println(s2);
student s3 = student.get1();
student s4 = student.get1();
System.out.println(s3);
System.out.println(s4);
}
}