单例模式:
有些时候,我们只能创建一个对象,比如说:我们的回收站只能创建一次,此时我们就需要使用到单例模式。
1.饿汉模式:不会产生安全问题,因为类加载的时候该对象就被创建好了
class DanLi {
private DanLi(){}
private static DanLi dl = new DanLi();
public static DanLi getDanLi(){
return dl;
}
}
2.懒汉模式:线程安全,但是效率低
class DanLi2{
private DanLi2(){}
private static DanLi2 danLi = null;
public static synchronized DanLi2 getDanLi(){
if(danLi == null){
danLi = new DanLi2();
}
return danLi;
}
}
改进版:
class DanLi2_Super{
private DanLi2_Super(){}
private static DanLi2_Super danLi = null;
public static DanLi2_Super getDanLi(){
synchronized (DanLi2_Super.class) {
if (danLi == null) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
danLi = new DanLi2_Super();
}
}
return danLi;
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println(DanLi2.getDanLi());
}
}
public class DanLiDemo{
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(new MyRunnable()).start();
}
for (int i = 0; i < 100; i++) {
new Thread(new MyRunnable()).start();;
}
}
}