懒汉式,实现懒加载需要用到同步锁。
虽然做到了线程安全,并且解决了多实例的问题,但是它并不高效。因为在任何时候只能有一个线程调用 getInstance() 方法。
package com.pn.thread;
public class SingletonLazy {
private SingletonLazy() {}
static SingletonLazy singleton = null;
public static synchronized SingletonLazy getInstance() {
if (singleton == null) {
singleton = new SingletonLazy();
}
return singleton;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
// pool.execute(()->{System.out.println(Singleton.getInstance().hashCode());});
new Thread(() -> {System.out.println(SingletonLazy.getInstance().hashCode());}, String.valueOf(i)).start();
}
}
}
输出结果如下: 能保证线程安全,并且实现了单例。