单例模式-饿汉式:
Class Person {
Private Person(){}
Private static Person p = new Person();
Private static Person getPerson(){
Return p;
}
}
懒汉式:
Class Person {
Private Person(){}
Private static Person p = null;
Private static Person getPerson(){
If (p==null)
P = new Person();
Return p;
}
}
在多线程下 单例模式中的 懒汉式中的 get方法要用synchronized锁修饰 防止多个线程new多个对象 但是用synchronized同步方法这样效率低了点 可以用另一个方式: 因为方法是静态的所有锁是类名.class(这个类随便都可以只要是两个类都可以访问到) 可以用锁可控制代码块 不一定是函数 这个方式效率稍高
If(s==null){
Synchronized(Person.class){If(s==null){
S= new Person();}
}
} |