1.单例模式分为两种,饿汉模式和懒汉模式.以下是饿汉模式:
java
public class SingleTonHungry {
private static SingleTonHungry singleTonHungry = new SingleTonHungry();
private SingleTonHungry() {
}
public static SingleTonHungry getInstance() {
return singleTonHungry;
}
}
2.懒汉模式下,需要考虑多线程安全问题,首先是使用synchronized加锁,然后是使用双if判断是否存在实例,最后需要使用volatile保证内存可见性和指令重排序问题.
java
public class SingleTonLazy {
private static volatile SingleTonLazy singleTonLazy = null;
private static Object lock = new Object();
private SingleTonLazy() {
}
public static SingleTonLazy getInstance() {
if (singleTonLazy == null) {
synchronized (lock) {
if (singleTonLazy == null) {
singleTonLazy = new SingleTonLazy();
}
}
}
return singleTonLazy;
}
}