实现方式:
1.构造方法私有化
2.创建类的静态变量,不实例化,给该静态变量添加volatile关键字,设定instance为共享变量
3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化
4.在公共方法的内部生成实例的代码块加上synchronized关键字(给该代码块加锁)
案例:
package singlePattern;
public class SinglePattern4 {
private SinglePattern4(){
}
private static volatile SinglePattern4 instance;
public static SinglePattern4 getInstance(){
if(instance == null){
synchronized (SinglePattern4.class) {
if(instance == null){
instance = new SinglePattern4();
}
}
}
return instance;
}
}
优缺点分析:
1.Double-Check概念是多线程开发中常使用到的,如代码所示,我们进行了两次if(instance == null) 检查,这样就可以保证线程安全了
2.这样,实例化代码只执行一次,后面再次访问时,判断if(instance == null),直接return 实例化对象,也避免的反复进行方法同步。
3.线程安全:延迟加载,效率较高
4.volatile禁止实例化的时候,在底层进行了编译后的代码重排序
4.结论:在实际开发中,推荐使用这种单利设计模式
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载