多线成-单例设计模式-懒汉式

 重点:一般出题为:请给我些一个延迟加载的单例设计模式示例
1、 懒汉式和饿汉式的区别:(面试面的都是懒汉式):
懒汉式的特点在于实例的延迟加载
2、懒汉式延时加载有没有问题:
有问题,如果多线程访问的话会出现线程安全问题。
怎么解决:
可以加同步来解决,加同步的方式用不同代码块和同步代码但是稍微有些低效。用双重判断可以解决效率问题。
3、加同步的时候使用的锁是哪一个:
该类所属的字节码文件对象。

//懒汉式:  延迟加载的单例设计模式就是懒汉式
class Single {
private static Single s = null;

private Single() {
} //延迟加载

// private static synchronized Single getInstance(){ //懒汉式如果加了同步变成同步函数会比较低效↓
private static Single getInstance() {
//用双重判断来较少锁的判断次数,以此来解决效率问题
// ---->C(线程) :C也进不去因为里面有B所以不为空
if (s == null) {
// ---->B(线程) :B就进不去,因为有A在里面没执行完,锁住了
synchronized (Single.class) { //变成同步代码块(因为是静态方法所以他的锁是:类名.class)
if (s == null)
// ---->A(线程) :A假如在着睡着了的话
s = new Single();
}
}
return s;
}
}

public class SingleDemo {
public static void main(String[] args) {
System.out.println();
}
}
posted @ 2021-11-22 00:01  滔滔是个java小白  阅读(24)  评论(0编辑  收藏  举报