1、饿汉模式: 定义一个对象。在单线程和多线程中同样适用。但是刚开始就初始化对象,影响效率
public Person{
public static final Person person = new Person();
private String name;
private static Person getPerson(){
return person;
}
}
2、懒汉式: 在getPerson()方法上面加入同步synchronized锁,当线程a进入后,线程b,线程c,依次排队等候。同样效率低
public Person{
private static Person person;
private String name;
private static synchronized Person getPerson(){
if(null == person){
person = new Person();
}
return person;
}
}
3、双重校验
public Person{
private static Person person;
private String name;
private static Person getPerson(){
if(null == person){ //第一次校验
synchronized (Person.class) { //改地方可能出现 线程a,线程b相差几毫秒进入。
if(null == person){ //第二次校验,避免相差几毫米进来的线程
person = new Person();
}
}
}
return person;
}
}
本文深入探讨了单例模式的三种实现方式:饿汉模式、懒汉式和双重校验。对比了它们在效率和线程安全性上的差异,帮助读者理解不同场景下选择合适单例模式的重要性。
881

被折叠的 条评论
为什么被折叠?



