单例模式

来源:互联网 发布:玄空飞星排盘软件下载 编辑:程序博客网 时间:2024/05/16 06:35
package SingleClass;
// 使用单例模式时,建议使用饿汉式


//饿汉式,一旦加载类就new单例对象,方便简单,不存在线程安全隐患
class Single1 {
// 三步:1.私有静态变量对象  2.私有化构造方法  3.静态方法返回类的对象
private static Single1 s1 = new Single1();
private Single1() {

}
public static Single1 getInstance() {
return s1;
}


}




// 懒汉式,调用静态方法的时候才new单例对象,此例存在线程安全隐患,例3、例4能解决
class Single2 {
private static Single2 s2 = null;
private Single2() {

}
public static Single2 getInstance() {
if(s2 == null) {
// 当线程A执行到此处时被CPU挂起,而线程B也来执行,就不能保证单例类的对象唯一性
s2 = new Single2();
}
return s2;
}
}


class Single3 {
private static Single3 s3 = null;
private Single3() {

}
// 给这个静态方法加上锁,就能解决安全问题,但是每调用一次静态方法都要判断锁是否关着,比较费时
public static synchronized Single3 getInstance() {
if(s3 == null) {
s3 = new Single3();
}
return s3;
}
}


class Single4 {
private static Single4 s4 = null;
private Single4() {

}


public static Single4 getInstance() {
// 双重判断
if(s4 == null) {
// s4不为空就不必检查锁的状态了,省得每次都要检查
synchronized(Single4.class) {
if(s4 == null) {
s4 = new Single4();
}
}

}
return s4;
}
}
0 0
原创粉丝点击