2016-07-28 00:10:14
懒汉式:
class text
{ public String k;
private static text t=null;//右边代码结构比上边饿汉式繁琐,可能出现安全问题
private test(){} //安全问题无疑是违背这个程序的初衷就是可以创建多个实例
public static text getObject()
{ //多线程的时候,运行状态到就绪状态(简单的说就是线程失去了CPU的执行权)
if (t==null)
{ //---------->到就绪区 Tread1,Tread2依次卧倒(线程失去了CPU的执行权)
t=new text(); //显而易见以上两个线程创建了两个实例
return t; //在cup负荷时候进程多而线程为进程的执行单位在切换时可能出现以上情况
}
return t;
}
}
//那么如何解决以上问题
代码如下:
class test
{ public String k;
private static text t=null;
private test(){}
public static text getObject()
{
if (t==null)
//外面新增一个判断为一旦生成一个对象后就不在判断锁的问题
// 来优化代码(节省时间)
{ synchronized(test.class){ //在此有锁,只能进入一个线程就不会出现 多个线程创建多个实例
if(t==null){
t=new text(); // 补充:因为此时方法为静态不能调用this,
return t; //所以调用已经生成的类名.class 字节码对象;
//下面有更详细对test.class补充
}
}
}
return t;
}
-------------------------------------------------------我是分隔符---------------------------------------------------
补充:
单例模式:
饿汉式:
/*饿汉式*/
/*class test
{ public String k;
private static final text t=new text();//正规写法把final 写上 成为一个不可以改变的常量
private text(){}
public static text getObject(){
return t; //在加载的类的时候就生成了对象,代码结构简单基本不存在安全问题
//在加载类时要比懒汉式要费时长,调用对象时比懒汉式时间段
}
获取字节码对象的方式其一:
类名.class,你可以理解为字节码本身就是静态的,类加载的时字节码就进JVM了。所以类.class好比类调用静态方法似得调用字节码对象。
------------------------------------说明----------------------------------------------------------------------------------------------------------------
本人不过大一学生,第一次写学习感悟.以上如果程序有问题或者描述不清请留言谢谢.
如果大家有更好的方法希望互相学习共同进步.ljs.