单例模式应该是在面试中问的最多的一种设计模式.
下面记录一下单例的几种实现方式:
1. 懒汉(线程不安全)
/**
* 单例模式 - 懒汉(非线程安全)
*/
public class Singleton1 {
private static Singleton1 singleton1;
private Singleton1() {}
public static Singleton1 getInstance() {
if (singleton1 == null) {
singleton1 = new Singleton1();
}
return singleton1;
}
}
2. 懒汉(线程安全)
/**
* 单例模式 - 懒汉(线程安全)
*/
public class Singleton2 {
private static Singleton2 singleton2;
private Singleton2() {}
private static synchronized Singleton2 getInstance() {
if (singleton2 == null) {
singleton2 = new Singleton2();
}
return singleton2;
}
}
3. 饿汉
/**
* 饿汉模式
*/
public class Singleton3 {
private static Singleton3 singleton3 = new Singleton3();
private Singleton3() {}
private static Singleton3 getInstatnce() {
return singleton3;
}
}
4. 双重校验锁
/**
* 双重校验锁
*/
public class Singleton4 {
private static volatile Singleton4 singleton4;
public Singleton4() {}
public static Singleton4 getInstatnce() {
if (singleton4 == null) {
synchronized (Singleton4.class) {
if (singleton4 == null) {
singleton4 = new Singleton4();
}
}
}
return singleton4;
}
}
浙公网安备 33010602011771号