静态内部类:
package thread.singleton;
public class StaticInnerClassSingleton {
private static class Singleton{
private static Singleton singleton = new Singleton();
}
public Singleton getInstance(){
return Singleton.singleton;
}
}
使用双重if判断+synchronized:
package thread.singleton;
public class SynchronizedLazySingleton {
private static SynchronizedLazySingleton lazySingleton;
private SynchronizedLazySingleton(){}
public static SynchronizedLazySingleton getInstance(){
//效率提高,避免后续线程都尝试获取锁照成锁竞争
if(lazySingleton == null){
try {
//模拟共享对象初始化时间
//TimeUnit.SECONDS.sleep(1000);
Thread.sleep(1000);
synchronized (SynchronizedLazySingleton.class) {
//在进入sychronzied方法体后,如果不进行if判断,会引发线程安全问题
if(lazySingleton == null){
lazySingleton = new SynchronizedLazySingleton();