package dmode.singleton;
import java.util.Random;
/**
* 类描述: 单例模式
* 单例定义:ensure a class has only one instence,and provide a global point of access to it
* 确保一个类只有一个实例,并且提供一个全局访问点来访问这个实例
* 其他内容:static 关键字修饰的内容,存储在静态代码区域,
* java 的存储内容包括:堆、栈(常量、对象引用)、静态存储区
* @version 1.0 CreateDate: 2015-2-12
*
* @history:
* @updateDate @updatePerson @declare
*
*/
public class SinglClass {
private static String singlParam;
//懒汉式声明,在使用对象的时候再获取
//线程不安全:在getInstenc() 方法中,如果并发,可能获取获取多个实例
//解决方法:可以用 synchronized 修饰方法,也可以在方法体内用 synchronized{}代码块
private static SinglClass singlClazz;
//饿汉式声明,在类的初始化时就获取实例,final 的作用是让这个实例不在变化
//线程安全
private static final SinglClass singlClazz2 = new SinglClass("饿汉式");
private static int time = 1;
private SinglClass(String param){
System.out.println("开始构造对象" + new Random().nextInt(100) + param);
}
//懒汉式声明
//synchronized 保证线程安全
public static synchronized SinglClass getInstence(){
if(singlClazz == null){
singlParam = "懒汉式";
singlClazz = new SinglClass("懒汉式");
}
return singlClazz;
}
//饿汉式声明
public static SinglClass getInstence2(){
return singlClazz2;
}
public void sayHello(){
if(this == singlClazz){
System.out.println(singlParam + "say Hello " + time++ );
}else{
System.out.println("饿汉式" + "say Hello " + time++ );
}
}
}