步骤
1)单利模式 防止其他类中new,所以private修饰
2)类中创建对象----但是要在静态代码块中创建【并且用volatail修饰】
3)对外提供一个静态方法来创建对象【这一步要使用懒加载,并且双重验证保证多线程安全】
优点
线程安全;
延迟加载;
效率较高;
缺点
没有缺点,至于今天依然相对完美【2019.11.18】
代码实现
(实际开发就用它就完事了)
package yuan.com.dp.singleton;
/**
* 测试类 其实应该用多线程来测试的这里测试 毫无意义,有点强迫症的感觉。
*/
class Test_SingleTon_5 {
public static void main(String[] args) {
SingleTon_5 ton_1 = SingleTon_5.getSingleTon_5();
SingleTon_5 ton_2 = SingleTon_5.getSingleTon_5();
System.out.println(ton_1 == ton_2);
}
}
/**
* 单利模式-懒汉式-双重检查
*/
public class SingleTon_5 {
/**
* 1.单利模式 防止其他类中new,所以private修饰
*/
private SingleTon_5() {
}
/**
* 2.类中创建私有对象volatile修饰
*/
private static volatile SingleTon_5 singleTon_5 = null;
/**
* 3.对外提供一个静态方法来创建对象
*
* @return singleTon_5实例
* 相较于前一版多加了个synchronized
*/
public static SingleTon_5 getSingleTon_5() {
//非常优秀的逻辑处理,解决了多线程问题的同时又一定程度上解决了安全问题。
if (singleTon_5 == null) {
synchronized (SingleTon_5.class){
if(singleTon_5 == null){
singleTon_5 = new SingleTon_5();
}
}
}
return singleTon_5;
}
}
网友评论