4.单例模式-懒汉式-极简
2019-11-18 本文已影响0人
测试员
步骤
1)单利模式 防止其他类中new,所以private修饰
2)类中创建对象----但是要在静态代码块中创建
3)对外提供一个静态方法来创建对象【这一步要使用懒加载】
优点
起到了懒加载的作用,但是只能在单线程下使用。
缺点
如果在多线程下,一个线程进入了if (singleton == null)判断语句块,还未来得及 往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例。所以 在多线程环境下不可使用这种方式 【没用,但是要过一遍,因为这里有懒加载的核心实现,并且抛砖引玉引出多线程常用关键字 volatile 】
代码实现
package yuan.com.dp.singleton;
/**
* 测试类
*/
class Test_SingleTon_3 {
public static void main(String[] args) {
SingleTon_3 ton_1 = SingleTon_3.getSingleTon_3();
SingleTon_3 ton_2 = SingleTon_3.getSingleTon_3();
System.out.println(ton_1 == ton_2);
}
}
/**
* 单利模式-懒汉式-极简
*/
public class SingleTon_3 {
/**
* 1.单利模式 防止其他类中new,所以private修饰
*/
private SingleTon_3() {
}
/**
* 2.类中创建私有对象
*/
private static SingleTon_3 singleTon_3 = null;
/**
* 3.对外提供一个静态方法来创建对象
*
* @return singleTon_3实例
*/
public static SingleTon_3 getSingleTon_3() {
//这里是精华,使用到了懒加载,其实优化代码就是尽量懒加载,不过懒加载也要视情况而定。
if (singleTon_3 == null) {
singleTon_3 = new SingleTon_3();
}
return singleTon_3;
}
}