校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 设计模式 > 单例模式
题目

单例模式,饿汉和懒汉分别存在的问题(阿里面试题)

解答

单例设计模式: 核心思想:就是这个类,在程序的任何其他模块中,获取它的对象时,拿到的永远是同一个对象。

单例模式有两种写法:懒汉式和饿汉式。

懒汉式:若为空,则创建一个;若不为空,则直接返回。

public class ProductDb {
public HashMap<String, String> pMap = new HashMap<>();

static ProductDb pdb = null;

private ProductDb() {

}


public static synchronized ProductDb getProductDb() {

if(pdb==null) {
pdb = new ProductDb();
}
return pdb;

}

饿汉式:先创建一个,别人调用的时候都返回这一个。

public class ProductDb2 {
public HashMap<String, String> pMap = new HashMap<>();
static ProductDb2 pdb = new ProductDb2();

private ProductDb2() {
}

public static ProductDb2 getProductDb() {

return pdb;
}
}

懒汉式存在问题:判断是否为空以及创建一个新的对象并非原子操作。若用多线程来操作可能会同时创建多个新的对象,需要加锁。

Public class ProductDb {
public HashMap<String,String> pMap=new HashMap<>();
static ProductDb pdb=null;
private Product() { //构造方法要为私有
}
public static ProductDb getProductDb(){
if(pdb==null){
synchronized(pdb){
if(pdb==null){
pdb=new ProductDb();
}
}
}
return pdb;
}
}
C 0条回复 评论

帖子还没人回复快来抢沙发