package com.jason.singleton1;
/**
* @author jason
* @Description:单例模式 懒汉式只有初始化的时候才会初始化对象
* @date 2018/2/2
*/
public class Singleton {
//1.私有化构造器
private Singleton(){
}
//2.提供唯一的对象
private static Singleton singleton = null;
//3.对外提供静态方法
public static Singleton getSingleton(){
if(singleton == null){
//如果为空对象,则new一个给sinleton
//但是存在线程不安全问题,加上同步代码块
synchronized (Singleton.class) {
//双重检测锁
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
package com.jason.singleton1; /** * @author jason * @Description: 饿汉式 在加载到内存中的时候就初始化对象 * @date 2018/2/2 */ public class Singleton1 { //1:提供私有化构造器 private Singleton1(){ } //2.初始化的时候提供该静态对象 private static Singleton1 singleton1 = new Singleton1(); //3.向外提供公共方法对外访问 public static Singleton1 getSingleton1(){ return singleton1; } }
package com.jason.singleton1; /** * @author jason * @Description: 测试单例模式 * @date 2018/2/2 */ public class Test { public static void main(String[] args) { //测试饿汉式 Singleton1 s1 = Singleton1.getSingleton1(); Singleton1 s2 = Singleton1.getSingleton1(); //如果返回true,则证明是对象是同一个对象 System.out.println(s1 == s2); //测试懒汉式 Singleton singleton = Singleton.getSingleton(); Singleton singleton1 = Singleton.getSingleton(); //如果返回true,则证明对象是同一个对象 System.out.println(singleton == singleton1); } }