单例模式之懒汉式:
class LazyMan {
//单例模式之懒汉式,只有在需要的时候才被创建,
//因为多个线程共享一个变量,所以会产生线程安全问题
static private LazyMan lazyMan;
/**
* 因为要解决线程安全问题所以需要加上synchronized,但是这样
* 加上后会使得程序效率很低,不仅仅是因为每次锁只允许一个线程进入,
* 而且只有lazyMan为null的时候才会去创建,才会产生线程安全问题,
* 不为null的时候是不会产生线程安全问题的,所以不能写成如下代码
*/
// static synchronized LazyMan getLazyMan() {
// if (lazyMan == null) {
// lazyMan = new LazyMan();
// }
// return lazyMan;
// }
//这是静态方法
static LazyMan getLazyMan() {
//双重检验,因为如果有两条线程同时访问,假设线程A已经创建好了对象,
//但是线程B因为也是null,如果不加第二次判断那么线程B也会创建对象。
if (lazyMan == null) {
//静态代码块用共享变量的字节码文件
synchronized (LazyMan.class) {
if (lazyMan == null) {
lazyMan = new LazyMan();
}
}
}
return lazyMan;
}
}
public class Demo {
public static void main(String[] args) {
LazyMan lazyMan1 = LazyMan.getLazyMan();
LazyMan lazyMan2 = LazyMan.getLazyMan();
System.out.println(lazyMan1 == lazyMan2);
}
}
输出:
true