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;
}
}